2015-06-11 85 views
7

我正在生成一个XML文件来进行付款,并且我对用户的全名有一个限制。该参数只接受字母字符(a-ZAZ)+空格来分隔名字和姓氏。如何筛选Java字符串以仅获取字母字符?

我无法以简单的方式过滤这个问题,我如何构建正则表达式或过滤器来获得我期望的输出?

实施例:

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

我需要与单个元音装饰品转化元音如下:A> A,A> A,A>一个,等等;并删除特殊字符,如点,连字符等。

谢谢!

+5

如何'O'成为'O'和BTW'[A-ZA-Z]'不包括'O' – anubhava

+1

我需要按如下方式将单元音中的装饰元素转换为元音:a> a,à> a,→a等等。 – EnriMR

+3

该要求必须是您的问题的一部分,而不是在评论中。另外不要忘记显示你的尝试。 – anubhava

回答

12

你可先用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

在这种情况下的替代可能是列出所有可能的字母和它们的替代...

+1

这正是我需要的,因为系统正在等待我的XML文件不允许任何其他字符作为名称字段 – EnriMR

1

您可以稍后replaceAll[^A-Za-z ]使用此方法removeAccents

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 demo

相关问题