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

我尝试使用上面的代码找到模式>Part\s.docToProcess(这是一个大的XML文档的字符串),然后是我想要做的就是更换内容与<ref></ref>替换模式匹配字符串

任何想法的格局我怎样才能使output变量等于docToProcess除与替代如上文所述一致?

编辑:我需要在更换时以某种方式使用匹配器。我不能只用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); 

不幸的是,你不能使用StringBuilder由于有关Java API的历史约束。

+0

哦!只是在我的回答中添加了相同的内容。无论如何,+1 +1 :) –

+0

@RohitJain我不认为OP想逃避这一点。我会删除它。 –

+0

@Marko ..是的,这个问题并不清楚,所以我不能回复我的评论。更好地保持原来:) –

3

您可以使用String#replaceAll方法。它需要一个Regex作为第一个参数: -

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

需要注意的是,dot (.)是一个特殊的元字符在regex,它匹配的一切,而不仅仅是一个dot(.)。所以,你需要逃避它,除非你真的想匹配>Part\\s之后的任何字符。而且您需要添加2个反斜杠才能在Java中进行转义。


如果你想使用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()); 

OUTPUT: -

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

Lol我想标记你和Marko的答案是正确的,因为他首先得到它,但你的工作非常好。不知道该怎么办 – ThreaT

+0

@ ThreaT ..啊!在标记任何答案时不要感到困惑。只要标出最好的一个。如果两者相同,只要先标出你感觉到的那个。所以,肯定标记** Marko的答案**。没问题:)你可以做的是,添加一个upvote作为你未被标记的答案的补充。 ;) –

+0

@ThreaT我写了我的答案,因为你特意让我:)否则,我会留下评论。 –

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