Java: найти слово в строке и заменить его новым словом, если оно в определенной позиции - PullRequest
2 голосов
/ 05 марта 2012

У меня есть пример строки, такой как:

«Я люблю крикет. Я люблю футбол. Я люблю теннис. Я люблю каждую игру !!! «

Теперь я хочу в первый раз заменить I (в позиции 1 ) на " We ". Так становится

" Мы Любим крикет. Я люблю футбол. Я люблю теннис. Я люблю каждого игра!!! «

Снова во втором запуске я хочу заменить I (в положении 7 ) на " We ".

"Я люблю крикет. Я люблю футбол". Мы Любим теннис. Я люблю каждого игра!!! «

Итак, что я хочу сказать, это заменить слово в определенной позиции новым словом. До сих пор я пробовал следующие вещи:

  1. ReplaceAll - работает только в том случае, если слова уникальны, но терпит неудачу в любом другом сценарии.
  2. StringTokenizer - воспользовался этим иди и найди архивиста. заменил слово в специальной позиции, а затем снова добавил все элементы в массив. Проблема в том, что специальные символы потеряны.

Пожалуйста, предложите лучший способ сделать это.

РЕДАКТИРОВАТЬ: разделитель может измениться и не является "".

Ответы [ 4 ]

1 голос
/ 05 марта 2012

yourString.split(" ") дает массив слов. Присвойте новое значение указанному индексу, а затем добавьте записи через пробел ("") для создания новой результирующей строки.

public static void main(String args[]) throws Exception 
{
    String testString = " I Love cricket. I Love football. I Love tennis. I Love every game!!! ";
    String[] words = testString.split(" ");
    words[7] = "We";
    String newString = "";

    for (int i = 0; i < words.length; i++)
        newString += " " + words[i];

    System.out.println(newString);
}
0 голосов
/ 05 апреля 2012
StringBuilder sb = 
    new StringBuilder(" I Love cricket. I Love football. I Love tennis. I Love every game!!! ")

sb.replace(1, 2, "We")
  .replace(35, 36, "We")

return sb.toString()

Если вам нужно динамически найти позиции «Я» и заменить некоторые из них на «Мы», тогда это другая история, но вы поняли.

replace (int start, int end, String str): Заменяет символы в подстроке этой последовательности на символы в указанной строке. Он возвращает это, так что вы можете соединить несколько вызовов замены.

0 голосов
/ 05 марта 2012

Используйте StringBuilder вместо этого, используйте методы insert().

0 голосов
/ 05 марта 2012

Вместо использования replaceAll используйте прямое регулярное выражение с Pattern . И просто замените свой первый матч, а не глобальный. Или просто используйте replaceFirst()

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