2016-06-27 1 views
-1

Строка замените изменение больше, что я хочу. НапримерСтрока заменить условием не быть частью слова Java

String input = "The blue house Theatres"; 
input = input.replace("the", "AAA"); 

выход будет:

"AAA blue house AAAatres" 

Я не whant изменить, когда это Подчасть слова.

+0

Вы говорите, что это заменяет _ignoring case_? – Tunaki

+0

Если я понимаю вас хорошо, вы хотите заменить его только тогда, когда это автономное слово, но не являетесь частью слова? –

+0

Да, игнорировать случай, когда после или после этого есть символ –

ответ

1

Использование регулярных выражений с word boundaries\b:

String input = "The blue house Theatres"; 
input.replaceAll("\\bThe\\b", "AAA"); 
+4

'replaceAll()' not 'replace()', поскольку последний не использует регулярное выражение. – Thomas

+0

@Thomas Thank-you –

+0

Не принимайте случаи, когда есть специальные символы после или раньше, только если они разделены пробелом. –

3

Сначала вы должны попытаться использовать replaceAll(regex, replacement) вместо replace(literal, replacement), поскольку последних работ по литералам только, то есть вы не можете использовать выражение, в то время как бывший использует регулярные выражения найти спички.

Следующее ваше регулярное выражение должно использовать границы слов, например. \bthe\b где \b отмечает границу слова.

Наконец, если вы хотите сделать регистронезависимую замену вам необходимо либо обрабатывать возможные случаи в epxression (например \b[tT]he\b) или переключить выражение в режим регистронезависимого, предваряя его с (?i), т.е. (?i)\bthe\b. Обратите внимание, что выражение [tT]he было бы не совпадением THE, в то время как выражение без учета регистра было бы, поэтому в зависимости от ваших требований вам нужно было выбрать тот или иной.

Используя все, что вы получите input = input.replaceAll("(?i)\\bthe\\b", "AAA");.

Edit:

Согласно Ваш комментарий по этому вопросу вы не хотите использовать границы слов, но только искать для персонажей до и после. Вы можете добиться этого с негативными внешними выражениями, например
. (?i)(?<![a-z])the(?![a-z]). Обратите внимание, что здесь я использовал довольно простой класс символов [a-z], если вам нужно исключить больше символов, которые вам нужно будет расширить.

Приведенное выше выражение будет соответствовать !The, the, THE? и т.д., но не Theatre или aether и т.д., так как, если требуется совпадение с не предшествовать символ ((?<![a-z])) , а не следовать один
((?![a-z])).

+0

Очень тщательный ответ. – Grayson

+0

большое спасибо @Thomas –

+0

@NahuelBrandan приветствую вас. Btw, посмотрите здесь для получения более подробной информации о регулярном выражении: http://www.regular-expressions.info/ – Thomas

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