17

假设我们有类似的东西:

&firstString=someText&endString=OtherText

我想用别的东西代替“someText”。考虑到我不知道 someText 可能是什么(任何字符串)并且我所知道的是它将被 &firstString= 和 &endString= 包围,这样做的最佳方法是什么

编辑:抱歉看起来这还不够清楚。我不知道“someText”可能是什么,我唯一掌握的信息是它将在 &firstString= 和 &endString= 之间

我正在考虑多次使用 split 但听起来很难看..

4

6 回答 6

25

您可以使用支持正则表达式的String#replaceAll ,如下所示:

String newstr = str.replaceAll("(&firstString=)[^&]*(&endString=)", "$1foo$2");
于 2012-05-01T20:20:56.337 回答
4

最容易理解的方法是搜索分隔符,并在它们的位置之间剪下一个子字符串,如下所示:

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);
}
于 2012-05-01T20:16:50.390 回答
3
yourString.replace("someText", "somethingElse");

根据澄清进行编辑

String x = "&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
于 2012-05-01T20:11:59.413 回答
1

据我了解这个问题,你应该做这样的事情,但我不确定我是否完全明白你的要求:

yourString = firstString + replacingString + endString;

如果您想要“替换”字符串:

replacedString = wholeString.substring(0, wholeString.lastIndexOf(endString) - 1);
replacedString = tempString.substring(firstString.length() + 1);
于 2012-05-01T20:19:06.690 回答
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);
 }
于 2015-10-01T16:16:27.520 回答
-1

只是替换整个&firstString=someText&,因为这包括我认为与 URL 相关的外部障碍?

于 2012-05-01T20:11:46.150 回答