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

时间:2014-07-03 07:23:10

标签: java ascii

我想从输入中删除所有ASCII个扩展字符。 (参考:http://www.theasciicode.com.ar/extended-ascii-code/letter-a-umlaut-diaeresis-a-umlaut-lowercase-ascii-code-132.html)。

因此我可以使用CharMatcher.ASCII,但我还想保留德语变音符号,它们包含在扩展字符集中。 那么,我怎么能实现这个目标呢?

3 个答案:

答案 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