17

次のようなものがあるとしましょう:

&firstString=someText&endString=OtherText

そして、「someText」を別のものに置き換えたいと思います。someTextが何であるか(任意の文字列)がわからず、&firstString =と&endString =で囲まれることだけを知っているという事実を考慮すると、これを行うための最良の方法は何ですか?

編集:申し訳ありませんが、これは十分に明確ではないようです。「someText」が何であるかわかりません。私が持っている唯一の情報は、それが&firstString =と&endString=の間にあるということです。

スプリットを何度も使うことを考えていましたが、醜く聞こえました。

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 に答える