1

「最後の部分文字列10を01に置き換える」というアルゴリズム10100を使用して文字列を置き換えるにはどうすればよいですか。10010私は試した

s=s.replace(s.substring(a,a+2), "01");

ただし、これはを返し01010、の最初と2番目のサブストリングの両方を置き換えます"10"。「a」はs.lastindexOf( "10");を表します。

4

5 に答える 5

3

これは、使用できるシンプルで拡張可能な関数です。最初にその使用/出力、次にそのコード。

String original  = "10100";
String toFind    = "10";
String toReplace = "01";
int ocurrence    = 2;
String replaced  = replaceNthOcurrence(original, toFind, toReplace, ocurrence);
System.out.println(replaced); // Output: "10010"

original  = "This and This and This";
toFind    = "This";
toReplace = "That";
ocurrence = 3;
replaced  = replaceNthOcurrence(original, toFind, toReplace, ocurrence);
System.out.println(replaced); // Output: "This and This and That"

機能コード:

public static String replaceNthOcurrence(String str, String toFind, String toReplace, int ocurrence) {
    Pattern p = Pattern.compile(Pattern.quote(toFind));
    Matcher m = p.matcher(str);
    StringBuffer sb = new StringBuffer(str);
    int i = 0;
    while (m.find()) {
        if (++i == ocurrence) { sb.replace(m.start(), m.end(), toReplace); break; }
    }
    return sb.toString();
}
于 2013-05-23T02:21:46.830 に答える
1

文字列の最後の 2 つのインデックスにアクセスする場合は、次を使用できます。

str.substring(str.length() - 2);

これにより、インデックスstr.length() - 2からlast character正確に最後の 2 文字である までの文字列が得られます。

これで、最後の 2 つのインデックスを任意の文字列に置き換えることができます。

更新: -

文字または部分文字列の最後の出現にアクセスしたい場合は、次のString#lastIndexOfメソッドを使用できます。

str.lastIndexOf("10");

わかりました、このコードを試すことができます: -

String str = "10100";
int fromIndex = str.lastIndexOf("10");
str = str.substring(0, fromIndex) + "01" + str.substring(fromIndex + 2);
System.out.println(str);
于 2012-10-26T18:30:41.130 に答える
0

最も簡単な方法:

String input = "10100";
String result = Pattern.compile("(10)(?!.*10.*)").matcher(input).replaceAll("01");
System.out.println(result);
于 2012-10-26T18:42:43.507 に答える
0

文字列の lastIndexOf メソッドを使用して、文字または部分文字列の最後のインデックスを取得できます。使用方法については、以下のドキュメント リンクを参照してください。

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#lastIndexOf(java.lang.String )

部分文字列のインデックスがわかったら、そのインデックスの前のすべての文字の部分文字列と、検索文字列の最後の文字の後のすべての文字の部分文字列を取得して連結できます。

これは少し引き出されており、実際に実行したわけではありません (構文エラーがある可能性があります) が、少なくとも私が伝えようとしていることの要点を示しています。必要に応じて、これをすべて 1 行で行うこともできますが、要点を説明することにはなりません。

string s = "10100";
string searchString = "10";
string replacementString = "01";
string charsBeforeSearchString = s.substring(0, s.lastIndexOf(searchString) - 1);
string charsAfterSearchString = s.substring(s.lastIndexIf(searchString) + 2);
s = charsBeforeSearchString + replacementString + charsAfterSearchString;
于 2012-10-26T18:31:30.780 に答える
0

10100 with 10010

String result = "10100".substring(0, 2) + "10010".substring(2, 4) + "10100".substring(4, 5);
于 2012-10-26T18:31:35.390 に答える