2009-09-21 19 views
4

그래서 숫자와 다른 기호가있는 문자열이 있는데 각 숫자의 값을 1 씩 증가시키고 싶습니다. 예를 들어 "test1check2"문자열에서 "test2check3"을 수신하려고합니다. 그리고이 메서드는 "replaceAll"메서드로 만 만들 수 있습니까? indexOf, charAt ...와 같은 메소드를 사용하지 않고도 (i.replaceAll ("\ d", ...)) ?,문자열의 증가 숫자 값

+0

당신이 test12이있는 경우 , 그것은 test13 또는 test23이되어야합니까? – Zed

+0

모든 숫자에 해당해야합니다. 숫자는 0-9이므로 반드시 test23이어야합니다. –

답변

9

나는 당신이 간단한 replaceAll ...)와 같이 몇 줄을 써야합니다.

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

여기에 구문 오류가있을 수 있지만 그와 비슷한 방식으로 작동합니다.

편집 : 각 디지트 별도로 증가되어야한다는 주석 (abc12d -> abc23d) 때문에 패턴 (\\ D +)로 변경한다 (\\ d)

EDIT 2 :Matcher 클래스에 따라 필요에 따라 StringBuilderStringBuffer으로 변경하십시오.

+0

감사합니다. 정확히 내가 필요한 것입니다! –

+0

+1 좋은 답변; 그러나 'StringBuilder'를 'StringBuffer'로 변경해야했습니다. 누군가를 위해 동일한 문제점이있는 경우를 대비하여! – chessofnerd

0

ID가 나는 문제는 지금 코멘트를 해결하기 위해 뿐이다 대답 한 알이

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

처럼 뭔가를 할 의향이 될, 자바에서이 작업을 수행 할 수 있습니다

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

자바 질문이 아니고 C#입니다. –