从Java中的String替换所有不一致的字符

时间:2013-10-25 15:05:31

标签: java

好吧,我有一个字母,数字和一些“奇怪”字符的字符串。我想用“白色空间”取代这个“奇怪”的角色。

查看原始字符串:

AVE  14 DE JULHO N�130

我想替换为:

AVE 14 DE JULHO N 130

这只是一个例子,但我有一个包含大量“普通字符”的大文件和另一个“奇怪的字符”

3 个答案:

答案 0 :(得分:3)

您可以使用replaceAll替换与模式匹配的所有字符:

String bad = "AVE  14 DE JULHO N�130";
String badPattern = "[^a-zA-Z0-9 ]"; // anything not a good character
String good = bad.replaceAll(badPattern, " ");

或者,如果你知道坏字符的范围:

String bad = "AVE  14 DE JULHO N�130";
String badPattern = "[\\u0080-\\uffff]"; // anything above U+007f
String good = bad.replaceAll(badPattern, " ");

请注意,最后一个只是积极匹配模式的示例,而不是建议使用的范围!特别是这个范围将消除大多数重音标记。

编辑这些“奇怪”字符很可能实际上是在构建(或使用)字符串的过程中使用错误字符编码解释的好字符。找到并纠正存在编码错误的地方可能更好,而不是试图过滤出错误的结果。

答案 1 :(得分:1)

  

问题是字母和数字有很多不同的字符   应该被接受,例如:':','/','+',' - ','。','','

为群组添加了更多字符。如果你想要允许一个角色,你只需将其输入方括号即可。

string.replaceAll("[^0-9A-Za-z\\s:,/+\\-.]", " ");

^是补码运算符。这将用空格替换所有非数字和非字母。如果您需要添加更多字符以便不擦除,只需在组中添加字符即可。

答案 2 :(得分:0)

最简单的正则表达式模式是\W replaceAll。只需使用:

 string.replaceAll("\\W", " ");

示例:

    String original= "AVE  14 DE JULHO N�130";
    String after=original.replaceAll("\\W", " ");
    System.out.println(after);

输出: AVE 14 DE JULHO N 130