我有两个字符串。
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.
如果我打印出wef
和wef2
的值,然后在差异检查器中进行比较,则可以从差异检查器中得到:
https://i.imgur.com/zIJX1ZT.png
即使我将所有\\s+
替换为常规空格,空格也有问题。为什么.replaceAll()无法正常工作?
答案 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
为什么?因为在第一个字符串中我们有空格,但是在第二个“不间断空格”中。