Почему .replaceAll () не работает правильно? - PullRequest
1 голос
/ 05 мая 2019

У меня есть две строки.

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 () не работает правильно?

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

Избавьтесь от начальных и конечных слешей, если вы не на самом деле ищите не буквенно-цифровые (-гифенические) символы, окруженные слешами:

wef.replaceAll("[^A-Za-z0-9- ]", "").replaceAll("\\s+", " ")
0 голосов
/ 05 мая 2019

Просто возможная причина - сервер возвращает «разные пробелы».Взгляните на этот код - он работает точно так, как вы написали:

    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

Почему?Потому что в первой строке у нас есть пробел, а во второй «неразрывный пробел».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...