【问题标题】:How to remove all Extended ASCII characters, but not umlauts?如何删除所有扩展 ASCII 字符,但不删除变音符号?
【发布时间】:2014-07-03 07:23:10
【问题描述】:

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

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

【问题讨论】:

  • 你有没有尝试过?
  • 正如我所写,我尝试了 ASCII 匹配器,例如:replaceAll("[^\\p{ASCII}]", ""); 但我不知道如何不替换变音符号。
  • 不,您没有说您尝试过,也没有发布任何代码。那么,您提到的replaceAll 除了变音符号之外的作品?不能直接加吗? (replaceAll("[^\\p{ASCII}&]", "");)

标签: java ascii


【解决方案1】:

如果您想为此任务使用 Guava CharMatcher 类,那么您可以使用 and(CharMatcher) 和 or(CharMatcher) 方法等组成匹配器。例如:

CharMatcher asciiPlusUmlauts = 
    CharMatcher.ASCII.or(CharMatcher.anyOf("ÄäÖöÜüß"));

你明白了吗?

【讨论】:

  • 太好了,很有希望。您是否还知道如何将任何字符转换为其“统一”而不是用固定字符替换它?例如:Ç -> C, á -> a...
  • @membersound cmets 不是提出不同问题的地方。先搜索,如果没有找到答案,请提出新问题。
  • 同意。我不会回答那个评论。
【解决方案2】:

如何使用白名单:

input = input.replaceAll("[^\\p{ASCII}ÄäÖöÜüß]", "");

字符类都是 ASCII 字符加上变音符号(我也加入了 esszet)

在行动:

System.out.println("a\tb© ½Ü, ß".replaceAll("[^\\p{ASCII}ÄäÖöÜüß]", ""));

输出:

a   b Ü, ß

【讨论】:

  • 控制字符是否要替换尚不清楚。也许[^\\p{ASCII}ÄäÖöÜüß]?
  • @Keppil 你达成了交易
【解决方案3】:

看看 Lucene 的org.apache.lucene.analysis.ASCIIFoldingFilter。它以一种有效的方式完全满足您的要求。它通过检查每个char 是否小于\u0080(即字符代码点128)来进行折叠。如果是,您可以保持原样(它是一个 ASCII 字符),否则您必须以某种方式处理它。有关 Unicode 拉丁字符的更多详细信息,请查看 http://en.wikipedia.org/wiki/Latin_characters_in_Unicode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 2012-04-29
    • 1970-01-01
    • 2015-08-30
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多