如何过滤Java String以仅获取字母字符?

我正在生成一个XML文件来进行付款,我对用户的全名有一个约束。 该param只接受字母字符(a-ZAZ)+空格来分隔姓名和姓氏。

我无法以简单的方式过滤这个,我如何构建正则表达式或filter以获得我想要的输出?

例:

'Carmen López-Delina Santos' 'Carmen LopezDelina Santos' 'Carmen López-Delina Santos'必须是'Carmen LopezDelina Santos'

我需要用单个元音转换带有装饰的元音,如下所示:á> a,à> a,a,等等; 并删除点,连字符等特殊字符。

谢谢!

您可以先使用Normalizer ,然后删除不需要的字符:

 String input = "Carmen López-Delina Santos"; String withoutAccent = Normalizer.normalize(input, Normalizer.Form.NFD); String output = withoutAccent.replaceAll("[^a-zA-Z ]", ""); System.out.println(output); //prints Carmen LopezDelina Santos 

请注意,这可能不适用于任何语言的所有和任何非ascii字母 – 如果遇到这种情况,该字母将被删除。 一个这样的例子是土耳其语i

在这种情况下的另一种选择可能是列出所有可能的字母及其替代品……

您可以将此removeAccents方法与稍后的replaceAll[^A-Za-z ]

 public static String removeAccents(String text) { return text == null ? null : Normalizer.normalize(text, Form.NFD) .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); } 

Normalizer将原始字符分解为基本字符和变音符号的组合(这可以是不同语言中的多个符号)。 áéí具有相同的符号: 0301用于标记'重音符号。

\p{InCombiningDiacriticalMarks}+正则表达式将匹配所有这些变音符号代码,我们将用空字符串替换它们。

在来电者:

 String original = "Carmen López-Delina Santos"; String res = removeAccents(original).replaceAll("[^A-Za-z ]", ""); System.out.println(res); 

请参阅IDEONE演示