我想从输入中删除所有ASCII
扩展字符。(参考:http://www.theasciicode.com.ar/extended - ascii code/letter - -元音变音分音符————元音变音小写- ascii代码- 132. - html)。
因此我可以使用CharMatcher.ASCII
,但进一步我想保留德语变音符,它包含在扩展的字符集中。那么,我怎样才能做到这一点呢?
如果要使用Guava CharMatcher
类完成此任务,则可以使用and(CharMatcher)
和or(CharMatcher)
方法组合匹配器,等等。例如:
CharMatcher asciiPlusUmlauts =
CharMatcher.ASCII.or(CharMatcher.anyOf("ÄäÖöÜüß"));
你明白了吗?
使用白名单如何:
input = input.replaceAll("[^\p{ASCII}ÄäÖöÜüß]", "");
字符类是所有ASCII字符加上小写字母(我也加入了esszet)
在行动:System.out.println("atb© ½Ü, ß".replaceAll("[^\p{ASCII}ÄäÖöÜüß]", ""));
输出:a b Ü, ß
看看Lucene的org.apache.lucene.analysis.ASCIIFoldingFilter
。它确实以一种有效的方式满足了您的需求。它通过检查每个char
是否小于u0080
(即字符代码点128)来进行折叠。如果是,您可以保持原样(它是一个ASCII字符),否则您必须以某种方式处理它。有关Unicode拉丁字符的详细信息,请查看http://en.wikipedia.org/wiki/Latin_characters_in_Unicode