如何删除所有扩展ASCII字符,但不包括变音符



我想从输入中删除所有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

最新更新