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