2012-11-22 3 views
0
String output = ""; 
pattern = Pattern.compile(">Part\s."); 
matcher = pattern.matcher(docToProcess); 
while (matcher.find()) { 
     match = matcher.group(); 
} 

나는 패턴에게 다음 무엇을 내가 원하는 것은 컨텐츠를 교체은 (a 큰 XML 문서의 문자열) docToProcess 내부 >Part\s.을 보려면 위의 코드를 사용하려고 해요 패턴과 일치하는 패턴 <ref></ref>교체 패턴 문자열에 일치

변수를 docToProcess과 동일하게 만드는 방법에 대한 아이디어는 위에 언급 된 바꿉니다.

EDIT : 대체 할 때 어떻게 든 사용할 수 있습니다. 사용할 수 없습니다 replaceAll()

+2

String.replaceAll()이 처리하지 않습니까 ?? 그냥 호기심이있다 –

+1

이미 완전한'Matcher' API를 사용하고 있다면, 그것은 루프 뒤에'matcher.appendReplacement'와'matcher.appendTail'입니다. –

+0

'replaceAll()'과'replace()'를 시도했지만 각각 문제가있었습니다. 어떻게하면 될지에 대한 코드를 보여줄 수 있습니까? 아마 나는 단지 잘못된 것들을 시도했다. 나는 내가 한 일을 붙이 겠지만 그것을 바꿨다. 그리고 더 이상 가지지 않았다. – ThreaT

답변

1

이가 w 모자이 필요합니다

String docToProcess = "... your xml here ..."; 
Pattern pattern = Pattern.compile(">Part\\s."); 
Matcher matcher = pattern.matcher(docToProcess); 
StringBuffer output = new StringBuffer(); 
while (matcher.find()) matcher.appendReplacement(output, "<ref></ref>"); 
matcher.appendTail(output); 

불행하게도, 당신이 때문에 자바 API에 대한 역사적 제약에 StringBuilder을 사용할 수 없습니다.

+0

앗 !! 그냥 내 대답에 같은 것을 추가했습니다. +1 답장 어쨌든 :) –

+0

@RohitJain 나는 OP가 도트를 벗어나고 싶다고 생각하지 않습니다. 나는 그것을 제거 할 것이다. –

+0

@ 마르크 .. 그래, 질문에서 분명하지 않다, 그래서 내 의견을 되돌릴 수 없다. 원본을 유지하는 것이 더 좋습니다 :) –

3

String#replaceAll 메서드를 사용할 수 있습니다. 그것은 첫 번째 매개 변수로 Regex을 취 - dot (.) 그냥 dot(.) 모든 것이 일치 regex에서 특별한 메타 문자가, 그리고

String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>"); 

참고. 따라서 >Part\\s 이후의 문자를 실제로 일치시키지 않는 한이 문자를 이스케이프 처리해야합니다. 그리고 Java에서 탈출하기 위해 2 개의 백 슬래시를 추가해야합니다. 당신이 Matcher 클래스를 사용하려면


, 당신은 Matcher.appendReplacement 방법을 사용할 수 있습니다 : -

String docToProcess = "XYZ>Part .asdf"; 
Pattern p = Pattern.compile(">Part\\s\\."); 
Matcher m = p.matcher(docToProcess); 
StringBuffer sb = new StringBuffer(); 
while (m.find()) { 
    m.appendReplacement(sb, "<ref></ref>"); 
} 
m.appendTail(sb); 
System.out.println(sb.toString()); 

출력 : -

"XYZ<ref></ref>asdf" 
+0

Lol 나는 먼저 그것을 얻었으나 당신의 것이 정말 잘 작동 했으므로 당신과 Marko의 대답을 올바르게 표시하고 싶습니다. 잘 모르는 사람 – ThreaT

+0

@ThreaT .. 아! 어떤 대답을 표시하는 동안 혼란스러워하지 마십시오. 가장 좋은 것을 표시하십시오. 두 사람이 같으면 먼저 느끼는 사람에게 표시하십시오. 그래서 Mark Marko의 대답 **을 표시하십시오. 문제 없어요 :) 당신이 할 수있는 일은 받아 들일 수 없다고 대답 한 답변을 보완하는 것입니다. ;) –

+0

@ThreaT 당신이 구체적으로 저에게 질문했기 때문에 저는 제 대답을 썼습니다 :) 그렇지 않으면 나는 그 의견에 머물러 있었을 것입니다. –

0
docToProcess.replaceAll(">Part\\s[.]", "<ref></ref>"); 
0
String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");