Java 为什么';t.replaceAll()是否正常工作?

Java 为什么';t.replaceAll()是否正常工作?,java,string,replaceall,Java,String,Replaceall,我有两条线 String wef=“83 Cool 4555”//从服务器 字符串wef2=“83冷4555”//从服务器 wef=wef.replaceAll(“/[^A-Za-z0-9-]/”).replaceAll(“\\s+”,”); wef2=wef2.replaceAll(\\s+,“”); wef.contains(wef2);//返回FALSE。 如果我打印出wef和wef2的值,然后在差异检查器中比较它们,我从差异检查器中得到: 虽然我将所有\\s+替换为常规空格,但空格还

我有两条线

String wef=“83 Cool 4555”//从服务器
字符串wef2=“83冷4555”//从服务器
wef=wef.replaceAll(“/[^A-Za-z0-9-]/”).replaceAll(“\\s+”,”);
wef2=wef2.replaceAll(\\s+,“”);
wef.contains(wef2);//返回FALSE。
如果我打印出
wef
wef2
的值,然后在差异检查器中比较它们,我从差异检查器中得到:


虽然我将所有
\\s+
替换为常规空格,但空格还是有问题。为什么.replaceAll()不能正常工作?

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

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

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

    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

为什么??因为在第一个字符串中有空格,但在第二个“非中断空格”中有空格。

当我运行这个代码段时,wef.contains(wef2)返回true。。。您是否检查过字符串的字节码或将其复制到十六进制编辑器中以检查空格是否实际上是空格?Java不是JavaScript。没有
/regex/flags
syngax,只有
regex
,可能有
(?flags)regex
。因此,请删除那些
/
@BenjaminUrquhart不幸的是,您从我的服务器获得的值与我的不同,因此我的服务器必须返回不同的空间值。但这就引出了一个问题:为什么replaceAll(\\s,“”)不起作用?@Jeffsmith,我只有一个想法:空白!=不可打印。尝试在任何字节查看器中比较字符串。