2015-12-17 1 views
2

Мне нужно заменить часть содержимого большой строки другим содержимым в том же месте.Как заменить несколько экземпляров подстроки в строке

Допустим, у меня есть строка:

String str = "package blah.foo.bar;\n" 
      + "import org.blah.blah;\n" 
      + "import sel.this.that;\n" 
      + "import sel.boo.foo;\n" 
      + "...more text"; 

Я хочу, чтобы вставить слово gen в операторы, которые начинаются с import sel. Так что конечный результат выглядит следующим образом: import sel.gen.this.that;

Я имел успех с следующий метод, но только когда я ЗНАЮ, где эта подстрока будет внутри строки. Моя проблема заключается в том, что я не знаю, как сделать следующий код динамической:

private String modifyString(String str){ 
    String hold = str.substring(0, str.indexOf(";")); 
    hold = new StringBuilder(hold).insert(13, "gen.").toString(); 
    str = str.replace("(?m)^package.*", hold); 
    return str; 

} 

Приведенный выше код правильно заменяет строки package blah.foo.bar; с package blah.gen.foo.bar;

Но опять-таки это работает только с заменой начальной части строка. Я ищу, чтобы иметь возможность хранить все экземпляры подстроки, а затем вставлять подстроку в эти подстроки.

ответ

5

Вы можете использовать простую линию, как:

str = str.replaceAll("import sel\\.", "import sel.gen."); 

Regex demo

IdeOne example

+0

Спасибо. Я слишком долго смотрел на это! –

+0

@ panthor314 рад помочь. –

-1

replace принимает буквальное выражение строку в качестве аргумента, а не регулярных выражений.

Это должно работать и проще, чем с помощью регулярных выражений:

String result = str.replace("import sel.", "import sel.gen."); 
+0

Не знаете, почему это получило downvote ... – assylias