如何从Java中的®,©,™等字符串中删除高位ASCII字符

时间:2011-02-15 19:16:27

标签: java string

我想从Java中的String中检测并删除高级ASCII字符,如®,©,™。有没有可以做到这一点的开源库?

4 个答案:

答案 0 :(得分:29)

如果您需要删除所有非US-ASCII(即外部0x0-0x7F)字符,您可以执行以下操作:

s = s.replaceAll("[^\\x00-\\x7f]", "");

如果您需要过滤许多字符串,最好使用预编译模式:

private static final Pattern nonASCII = Pattern.compile("[^\\x00-\\x7f]");
...
s = nonASCII.matcher(s).replaceAll();

如果它真的对性能至关重要,也许Alex Nikolaenkov的建议会更好。

答案 1 :(得分:16)

我认为您可以轻松地手动过滤字符串并检查特定字符的代码。如果符合您的要求,请将其添加到StringBuilder并最后对toString()进行操作。

public static String filter(String str) {
    StringBuilder filtered = new StringBuilder(str.length());
    for (int i = 0; i < str.length(); i++) {
        char current = str.charAt(i);
        if (current >= 0x20 && current <= 0x7e) {
            filtered.append(current);
        }
    }

    return filtered.toString();
}

答案 2 :(得分:5)

一种很好的方法是使用Google Guava CharMatcher

String newString = CharMatcher.ASCII.retainFrom(string);

newString将仅包含原始字符串中的ASCII字符(代码点&lt; 128)。

这比正则表达式更自然地读取。正则表达式可以花费更多精力来理解代码的后续读者。

答案 3 :(得分:1)

我知道您需要删除:ç,ã,Ã,但是对于需要转换的所有人ç,ã,Ã ---&gt; c,a,A 请看一下这段代码:

示例代码:

final String input = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ";
System.out.println(
    Normalizer
        .normalize(input, Normalizer.Form.NFD)
        .replaceAll("[^\\p{ASCII}]", "")
);

输出:

这是一个时髦的字符串