2015-01-27 5 views
0

하여 텍스트를 절단이 같은 샘플 데이터를 가지고 :정규 표현식

1) 태그 (-200, 7 번호를 가져, 등) 2 : 내가 원하는 무엇

<o:-200> Text1 
<o:7> Text2 
<o:218> Text3 
<o:325> Text4 

번호 변경)이 번호에 값을 추가합니다 (예 : + 100) 3) 전체 태그로 대체

출력 :

-100 Text1 
107 Text2 
318 Text3 
425 Text4 

내 코드의 그 :

String s; 
    Pattern p1 = Pattern.compile("<o:(-?[0-9]+)>"); 
    Matcher m = p1.matcher("<o:-200> ABC\n<o:7> ASDQWE\n<o:218> 12345.67\n<o:325> ASDFGD asdfsdf\n"); 
    StringBuffer s1 = new StringBuffer(); 
    while (m.find()){ 
     m.appendReplacement(s1, String.valueOf(100 + Integer.parseInt(m.group(1)))); 
    } 
    s = s1.toString().replaceAll("<o:\\b(\\d+)\\b>", "$1"); 
    System.out.println(s); 

하지만 내 출력은 다음과 같습니다

-100 Text1 
107 Text2 
318 Text3 
425 

하지만 전체 텍스트를합니다. ReplaceAll이 작동하지 않습니다 (첫 번째 값을 찾은 모든 태그 변경).

어떻게하면됩니까?

답변

4

Matcher.appendReplacement의 문서를 살펴보십시오. 여기에는 하나의 행이 없음을 명확하게 보여주는 예가 포함되어 있습니다.

while(...) {...} 
m.appendTail(s1); // <- this one 
+0

글쎄, 그게 다야! 고맙습니다! –

+0

패턴을''()''로 변경하고 m.group (2)에서 parseInt를 호출하면 replaceAll()에 대한 호출을 생략 할 수 있습니다. –