user1569897
user1569897

Reputation: 437

java replace substring in string specific index

How would I replace a string 10100 with 10010 using the algorithm "replace the last substring 10 with 01." I tried

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

but this returns 01010, replacing both the first and the second substring of "10". "a" represents s.lastindexOf("10");

Upvotes: 1

Views: 15137

Answers (5)

acdcjunior
acdcjunior

Reputation: 135742

Here's a simple and extensible function you can use. First its use/output and then its code.

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"

Function code:

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();
}

Upvotes: 3

Rohit Jain
Rohit Jain

Reputation: 213193

If you want to access the last two indices of a string, then you can use: -

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

This gives you string from index str.length() - 2 to the last character, which is exactly the last two character.

Now, you can replace the last two indices with whatever string you want.

UPDATE: -

Of you want to access the last occurrence of a character or substring, you can use String#lastIndexOf method: -

str.lastIndexOf("10");

Ok, you can try this code: -

String str = "10100";
int fromIndex = str.lastIndexOf("10");
str = str.substring(0, fromIndex) + "01" + str.substring(fromIndex + 2);
System.out.println(str);

Upvotes: 1

elias
elias

Reputation: 15480

The easiest way:

String input = "10100";
String result = Pattern.compile("(10)(?!.*10.*)").matcher(input).replaceAll("01");
System.out.println(result);

Upvotes: 0

Jim
Jim

Reputation: 6881

You can get the last index of a character or substring using string's lastIndexOf method. See the documentation link below for how to use it.

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

Once you know the index of your substring, you can get the substring of all characters before that index, and the substring of all characters after the last character in your search string, and concatenate.

This is a little drawn out, and I didn't actually run it (so I might have a syntax error), but it gives you the point of what I'm trying to convey at least. You could do this all in one line if you want, but it wouldn't illustrate the point as well.

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;

Upvotes: 0

user586399
user586399

Reputation:

10100 with 10010

String result = "10100".substring(0, 2) + "10010".substring(2, 4) + "10100".substring(4, 5);

Upvotes: 0

Related Questions