Как использовать string.replaceAll, чтобы изменить все после определенного слова - PullRequest
0 голосов
/ 03 августа 2020

У меня есть следующая строка: http://localhost:somePort/abc/soap/1.0

Я хочу, чтобы строка выглядела просто так: http://localhost:somePort/abc.

Я хочу использовать string.replaceAll, но не могу показаться чтобы получить правильное выражение. Мой код выглядит так: someString.replaceAll(".*\\babc\\b.*", "abc"); Мне интересно, что мне не хватает? Я не хочу разбивать строку или использовать .replaceFirst, как предлагают многие решения.

Ответы [ 3 ]

1 голос
/ 03 августа 2020

Казалось бы, имеет смысл использовать substring, но если вы должны использовать replaceAll, вот способ сделать это.

Вы хотите заменить /abc и все после него на просто /abc.

string = string.replaceAll("/abc.*", "/abc")

Если вы хотите быть более разборчивым, вы можете добавить границу слова после abc, что даст вам

string = string.replaceAll("/abc\\b.*", "/abc")
1 голос
/ 03 августа 2020

Просто для объяснения данного регулярного выражения, почему оно не работает:

\b \b - границы слова здесь не требуются, а также, поскольку .* добавляется в начале, он соответствует всему строка, и когда вы попытаетесь заменить ее на «ab c», она заменит все совпадение на «ab c». Следовательно, вы получите неправильный ответ. Вместо этого попытайтесь сопоставить только то, что требуется, а затем все сопоставимое будет заменено строкой «ab c».

someString.replaceAll("/abc.*", "/abc");

/abc.* - Looks specifically for /abc followed by 0 or more characters
/abc - Replaces the above match with /abc
0 голосов
/ 03 августа 2020

Вы должны использовать replaceFirst, так как после первого совпадения вы удаляете все после

text=  text.replaceFirst("/abc.*", "/abc");

Или

Вы можете использовать indexOf, чтобы получить индекс определенного слова, а затем получить подстрока.

String findWord = "abc";
text = text.substring(0, text.indexOf(findWord) + findWord.length());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...