2015-07-17 1 views
2

В моем приложении я предлагаю словарные слова и заменяю выбранное слово предложенным словом, используя .replaceAll(). Однако это заменяет всю подстроку во всей строкеКак заменить определенное вхождение подстроки в строке и игнорировать неполные совпадения в java?

, например, в этой строке,

String sentence = "od and not odds as a sample sam. but not odinary"; 

Если я предлагаю первое слово как нечетного .replaceAll() заменит каждое вхождение спос с нечетное следовательно, на четвертое слово oddds и изменить предложение

sentence.replaceAll("od", "odd"); 



//sentence String becomes 
sentence ="odd and not oddds as a sample sam. but not oddinary" 

Замена od на нечетное повлияло на все другие слова, которые имеют od символов в них.

Может ли кто-нибудь помочь мне с лучшим aproach?

+0

Ваш вопрос несколько неясен - это действительно помогло бы, если бы вы дали пример кода *, а не просто описывали его. Покажите нам код, образец ввода, фактический результат и ожидаемый результат. –

+0

Некоторый отрезанный код был бы хорош, чтобы помочь вам. –

+0

Почему бы не включить пространство? '.replaceAll (" od "," odd ")' –

ответ

4

Используйте регулярное выражение. Для примера «\ bod \ b» будет просто соответствовать единице как целому слову. \ b - граница слова, означающая либо начало, либо конец слова (заканчивается ли оно точкой или пробелом или чем-либо еще).

Метод replaceAll уже может принимать регулярное выражение, но если вам нужно больше энергии, вы можете посмотреть класс Matcher.

String REPLACE_WORD = "od" 
sentence.replaceAll("\\b" + REPLACE_WORD + "\\b", "odd"); 

даст вам правильный ответ. \ Говорит java, что вы хотите записать \ вместо \ b (сначала он анализирует строку, а затем анализирует эту строку как регулярное выражение).

+0

Легко лучшее решение для этого точного случая. – insidesin

+0

Спасибо @Astrogat – IsaacK

0

Используйте регулярное выражение в методе replaceAll():

\bod\b 

Это будет отфильтровывать вхождения od внутри любого другого слова. Конечно, когда вы используете его в методе Java, вам нужно, чтобы избежать \

Так

replaceAll("\\bod\\b", "odd"); 

должны это сделать.

0

Как уже упоминалось, вы можете использовать Matcher от Java.util.regex.*, который имеет много полезной функции.

String text = "I detect quite an od odour."; 
String searchTerm = "\\bod\\b"; 

Pattern pattern = Pattern.compile(searchTerm); 
Matcher matcher = pattern.matcher(text); 

text = matcher.replaceAll("odd"); 

System.out.println(text); 

Выход будет:

я обнаружить довольно странный запах.

Смежные вопросы