Ответ на обновленный вопрос
Проблема с вашей двойной трубой заключалась в том, что она будет искать совпадения для замены и, следовательно, заменять любое единственное вхождение чего-либо, совпадающего с первым словом («башмак»), и, если оно не работает, искать следующее потенциальное совпадение , которая является пустой строкой (между двумя трубами). Таким образом, вы найдете эти совпадения и замените их (как ни странно) пустыми строками. Поскольку совпадение было найдено для этой позиции, оно переключается на следующие потенциальные позиции и не проверяет другие слова для этой позиции.
Вполне вероятно, что любое слово после удвоенной трубы никогда не заменялось.
Это не привело к ошибке, потому что синтаксис действителен, и есть законные случаи, когда вы хотите искать пустые строки для вставки символов.
Оригинальный ответ
Сохраняет похожие ошибки, с которыми сталкиваются другие.
Это, очевидно, работает, поэтому осталось всего несколько вариантов:
- Вам необходимо присвоить возвращаемое значение (строка неизменна в Java, , как также упоминается Эраном )
- В строке есть некоторые непечатаемые символы;
- При чтении ввода и сравнении возникает проблема с кодировкой;
- Ваше слово ограничено чем-то, что не регистрирует границу.
- Требуется поиск без учета регистра (вместо этого используйте
Pattern.compile(regex, flags).matcher(str).replaceAll(repl)
с флагом CASE_INSENTIVE для компиляции шаблона )
- В другом месте что-то не так, что мы не можем видеть, потому что вы даете:
- ни весь код
- ни входные данные.
Пожалуйста, предоставьте больше кода и свой вводный отрывок.
Если вы читаете из сокета, также убедитесь, что вы указали правильные заголовки для своего запроса и используете правильный тип содержимого и кодировку символов. Также убедитесь, что вы не используете странную кодировку в исходных файлах и файлах входных данных.
Это частично переписано другого ответа, который я дал на этот вопрос о , почему метод java String.contains не возвращает правильно найденные совпадения .