替换java中字符串中的任何非ascii字符

时间:2013-09-04 21:12:25

标签: java regex unicode

如何在java中将-lrb-300-rrb-┬á922-6590转换为-lrb-300-rrb- 922-6590

尝试了以下内容:

t.lemma = lemma.replaceAll("\\p{C}", " ");
t.lemma = lemma.replaceAll("[\u0000-\u001f]", " ");

可能缺少一些概念性的东西。非常感谢任何有关解决方案的指示。

谢谢

2 个答案:

答案 0 :(得分:10)

尝试下一个:

str = str.replaceAll("[^\\p{ASCII}]", " ");

顺便说一下,\p{ASCII}都是ASCII:[\x00-\x7F]

另外,你需要使用常量Pattern来避免每次重新编译表达式。

private static final Pattern REGEX_PATTERN = 
        Pattern.compile("[^\\p{ASCII}]");

public static void main(String[] args) {
    String input = "-lrb-300-rrb- 922-6590";
    System.out.println(
        REGEX_PATTERN.matcher(input).replaceAll(" ")
    );  // prints "-lrb-300-rrb- 922-6590"
}

另见:

答案 1 :(得分:0)

假设您只想保留a-zA-Z0-9和标点字符,您可以这样做:

t.lemma = lemma.replaceAll("[^\\p{Punct}\\w]", " "));