Вопрос по java, regex – Заменить строку между двумя строками

7

Допустим, у нас есть что-то вроде:

&firstString=someText&endString=OtherText

И я хотел бы заменить «someText» с чем-то еще. Каков наилучший способ сделать это, учитывая тот факт, что я не знаю, что такое someText (любая строка), и все, что я знаю, это то, что он будет окружен & amp; firstString = и & amp; endString =

Изменить: извините, похоже, это не достаточно ясно. Я не знаю, что такое "SomeText" может быть, единственная информация, которую я имею, - то, что это будет между & amp; firstString = и & amp; endString =

Я думал об использовании раскола несколько раз, но это звучало некрасиво

Вы перестраиваете строку запроса? wkl
Что именно вам нужно сделать? А что ты пробовал до сих пор? Gareth McCaughan
Я добавил пояснения к вопросу, извините, если он не был достаточно ясен :) user220755

Ваш Ответ

6   ответов
2

yourString.replace("someText", "somethingElse");

EDIT based on clarification

&firstString=someText&endString=OtherText";
int firstPos = x.indexOf("&firstString=") + "&firstString=".length();
int lastPos = x.indexOf("&endString", firstPos);
String y = x.substring(0,firstPos) + "Your new text" + x.substring(lastPos);
System.out.println(y);

Выход:

&firstString=Your new text&endString=OtherText
Я просто уточнил вопрос дальше. Я не знаю, каким может быть какой-то текст (я знаю только строки вокруг него) user220755
@ user220755 - см. отредактированный ответ на основе ваших разъяснений.
Заголовок: «Заменить строку между двумя строками». :) Еще раз извините, если это не ясно, моя вина :) user220755
Это был не вопрос.
1

вы должны сделать что-то подобное, но я не уверен, что полностью понял, что вы спросили:

yourString = firstString + replacingString + endString;

Если вы хотите, чтобы "заменили" строка:

replacedString = wholeString.substring(0, wholeString.lastIndexOf(endString) - 1);
replacedString = tempString.substring(firstString.length() + 1);
0

что мы не переходим к концу строки, и будет делать это несколько раз.

 int startIndex = text.indexOf(startDelim);
 while (startIndex > -1)
 {
    int endIndex = text.indexOf(endDelim, startIndex);
    String endPart = "";

    if ((endIndex + endDelim.length()) < text.length())
       endPart = text.substring(endIndex + endDelim.length());

    text = text.substring(0, startIndex) + replacementText + endPart;
    startIndex = text.indexOf(startDelim);
 }
14

Строка # replaceAll это имеет поддержку для регулярных выражений, как это:

String newstr = str.replaceAll("(&firstString=)[^&]*(&endString=)", "$1foo$2");
Это вопрос Java, поэтому очевидно, что нет никакого сравнения с инструментами Unix
Какова будет производительность по сравнению с использованием команд sed или perl для замены строки?
public static String replaceBetween (String theString, String value, String open, String close) {return theString.replaceAll (& quot; (& quot; + open + & quot;) [^ & amp;] * (& quot; + close + & quot;) & quot ;, "$ 1" + значение + "$ 2"); }
-1

&firstString=someText& так как это включает в себя внешние барьеры, которые я предполагаю, связанные с URL?

@ user220755 да, затем используйте то регулярное выражение, упомянутое dcp, и замените sometext на [^ \\ & amp;] *
Я просто уточнил вопрос дальше. Я не знаю, каким может быть какой-то текст (я знаю только строки вокруг него) user220755
Вы можете объяснить немного дальше? user220755
3

как это сделать, - найти разделители и вырезать подстроку между их позициями, например так:

String str = "&firstString=someText&endString=OtherText";
String firstDelim = "&firstString=";
int p1 = str.indexOf(firstDelim);
String lastDelim = "&endString=";
int p2 = str.indexOf(lastDelim, p1);   // look after start delimiter    
String replacement = "quick_brown_fox";
if (p1 >= 0 && p2 > p1) {
    String res = str.substring(0, p1+firstDelim.length())
               + replacement
               + str.substring(p2);
    System.out.println(res);
}

Похожие вопросы