Le_Coeur
Le_Coeur

Reputation: 1541

Increment digit value in String

So, i have some String with digits and another symbols, and i want to increment the value of each digit at 1. For example: "test1check2" from this String i want to recieve "test2check3". And can i make this only with method "replaceAll"? (i.replaceAll("\d", ...) something like that)?, without to use methods such like indexOf, charAt...

Upvotes: 4

Views: 7048

Answers (2)

Adrian Pronk
Adrian Pronk

Reputation: 13906

I don't think you can do it with a simple replaceAll(...), you'll have to write a few lines like:

Pattern digitPattern = Pattern.compile("(\\d)"); // EDIT: Increment each digit.

Matcher matcher = digitPattern.matcher("test1check2");
StringBuffer result = new StringBuffer();
while (matcher.find())
{
    matcher.appendReplacement(result, String.valueOf(Integer.parseInt(matcher.group(1)) + 1));
}
matcher.appendTail(result);
return result.toString();

There's probably some syntax errors here, but it will work something like that.

EDIT: You commented that each digit must be incremented separately (abc12d -> abc23d) so the pattern should be changed from (\\d+) to (\\d)

EDIT 2: Change StringBuilder to StringBuffer as required by Matcher class.

Upvotes: 11

Mauro
Mauro

Reputation: 4511

Id be inclined to do something like this

string testString = new string("test{0}check{1}");
for (int testCount = 0; testCount < 10; testCount++)
{
   for (int checkCount = 0; checkCount < 10; checkCount++)
   {
   console.WriteLine(string.FormatString(testString, testCount, checkCount)); 
   }
}

I know the question has now been answered but to address the comments, in Java you can do this:

for (int testCount = 0; testCount < 10; testCount++)
{
   for (int checkCount = 0; checkCount < 10; checkCount++)
   {
      String s = String.format("test%scheck%s", testCount.ToString(), checkCount.ToString()); 
   }
}

Upvotes: 0

Related Questions