1

如何10100使用10010算法“将最后一个子字符串 10 替换为 01”来替换字符串。我试过了

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

但这会返回01010,替换 . 的第一个和第二个子字符串"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

如果要访问字符串的最后两个索引,则可以使用:-

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

这为您提供了从 indexstr.length() - 2到 的字符串last character,这正是最后两个字符。

现在,您可以用您想要的任何字符串替换最后两个索引。

更新: -

要访问最后一次出现的字符或子字符串,可以使用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 )

一旦知道子字符串的索引,就可以获取该索引之前所有字符的子字符串,以及搜索字符串中最后一个字符之后的所有字符的子字符串,然后进行连接。

这有点冗长,我实际上并没有运行它(所以我可能有语法错误),但它至少给了你我想要传达的意思。如果您愿意,您可以在一行中完成所有这些操作,但这也不能说明这一点。

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 回答