为什么 .replaceAll() 不能正常工作?

Why doesn't .replaceAll() work correctly?

我有两个字符串。

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

space 有问题,尽管我用常规 space 替换了所有 \s+。为什么 .replaceAll() 不能正常工作?

去掉开头和结尾的斜杠,除非你实际上正在寻找被斜杠包围的非字母数字(-hyphenic-spacic)字符:

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

只是一个可能的原因 - 服务器的 returns 'different spaces'。看看这段代码 - 它的工作原理与你写的完全一样:

    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

为什么?因为在第一个字符串中我们有 space,但在第二个字符串中有 'non-breaking space'.