0

好吧,我有一个带有字母、数字和一些“奇怪”字符的字符串。我想用“空白”替换这个“奇怪”的字符。

看看我的原始字符串:

AVE  14 DE JULHO N�130

我想替换为:

AVE 14 DE JULHO N 130

这只是一个例子,但我有一个包含很多“正常字符”和另一个“奇怪字符”的大文件

4

3 回答 3

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, " ");

请注意,最后一个只是正匹配模式的示例,而不是建议使用什么范围!特别是该范围将消除大多数重音符号。

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

于 2013-10-25T15:08:49.090 回答
1

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

为组添加了更多角色。如果您希望允许一个字符,您只需将其键入方括号即可。

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

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

于 2013-10-25T15:08:39.810 回答
0

最简单的正则表达式模式是 \Wwith 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

于 2013-10-25T15:16:11.867 回答