为什么 .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.
如果我打印出 wef
和 wef2
的值,然后在差异检查器中比较它们,我从差异检查器中得到:
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'.
我有两个字符串。
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
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'.