Java RegEx: заменить часть строки источника - PullRequest
3 голосов
/ 14 октября 2011

Если исходная строка содержит шаблон, замените его чем-нибудь или удалите его.Один из способов сделать это - сделать что-то подобное

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sourceString);
while(m.find()){
  String subStr = m.group().replaceAll('something',""); // remove the pattern sequence
  String strPart1 = sourceString.subString(0,m.start());
  String strPart2 = sourceString.subString(m.start()+1);
  String resultingStr = strPart1+subStr+strPart2;
  p.matcher(...);
}

Но я хочу что-то вроде этого

Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(sourceString);
    while(m.find()){
      m.group.replaceAll(...);// change the group and it is source string is automatically updated    
}

Возможно ли это?

Спасибо

Ответы [ 2 ]

9 голосов
/ 14 октября 2011

// change the group and it is source string is automatically updated

Нет способа изменить строку в Java, поэтому то, о чем вы просите, невозможно.

К удалить или заменить шаблон со строкой может быть получен с помощью вызова типа

someString = someString.replaceAll(toReplace, replacement);

В преобразуйте совпадающую подстроку, как, кажется, указывает ваша строка

m.group().replaceAll("something","");

лучшее решение, вероятно, использовать

  • A StringBuffer за результат
  • Matcher.appendReplacement и Matcher.appendTail.

Пример: * * тысяча тридцать-один

String regex = "ipsum";
String sourceString = "lorem ipsum dolor sit";

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(sourceString);
StringBuffer sb = new StringBuffer();

while (m.find()) {
    // For example: transform match to upper case
    String replacement = m.group().toUpperCase();
    m.appendReplacement(sb, replacement);
}

m.appendTail(sb);

sourceString = sb.toString();

System.out.println(sourceString); // "lorem IPSUM dolor sit"
2 голосов
/ 14 октября 2011

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

String source = "aabbaabbaabbaa";
String result = source.replaceAll("aa", "xx");  //results in xxbbxxbbxxbbxx

Удаление шаблона будет тогда:

String result = source.replaceAll("aa", ""); //results in bbbbbb
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...