为什么.replaceAll()无法正常工作?

时间:2019-05-05 18:30:33

标签: java string replaceall

我有两个字符串。

String wef = "83 Cool 4555"; // From server
String wef2 = "83 Cool 4555"; // From server

wef = wef.replaceAll("/[^A-Za-z0-9- ]/", "").replaceAll("\\s+", " ");
wef2 = wef2.replaceAll("\\s+", " ");

wef.contains(wef2); // Returns FALSE.

如果我打印出wefwef2的值,然后在差异检查器中进行比较,则可以从差异检查器中得到:

https://i.imgur.com/zIJX1ZT.png

即使我将所有\\s+替换为常规空格,空格也有问题。为什么.replaceAll()无法正常工作?

2 个答案:

答案 0 :(得分:2)

摆脱前导和尾随的斜杠,除非您实际上 正在寻找被斜杠包围的非字母数字(-hyphenic-spacic)字符:

wef.replaceAll("[^A-Za-z0-9- ]", "").replaceAll("\\s+", " ")

答案 1 :(得分:-1)

一个可能的原因-服务器返回“不同空间”。看一下这段代码-它与您编写的完全一样:

    String wef = "83 Cool 4555"; // From server
    String wef2 = "83\u00A0Cool\u00A04555"; // From server

    wef = wef.replaceAll("[^A-Za-z0-9- ]", "").replaceAll("\\s+", " ");
    wef2 = wef2.replaceAll("\\s+", " ");

    log.debug(wef);
    log.debug(wef2);

    assertFalse(wef.contains(wef2));

但输出看起来相同:

DEBUG 22:25:54.879 [main] (AAA.java:22) 83 Cool 4555
DEBUG 22:25:54.888 [main] (AAA.java:23) 83 Cool 4555

为什么?因为在第一个字符串中我们有空格,但是在第二个“不间断空格”中。