2012-11-22 169 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>");