[英]regex: replace matched text with output of method it's passed to
我有一個標記為這樣的文本文件:
Old McDonald had a <:farm/101:>
當通過此文本文件讀取的程序訪問此標記時,它會將farm/101
傳遞給將標記轉換為適當的HTML代碼的方法,具體取決於傳遞的標記類型。 在這種情況下,單詞farm需要轉換為超鏈接,其中101為HREF。 這是在parseTag()
方法中完成的,調用方法如下:
Pattern pattern = Pattern.compile("<:(.+?):>");
Matcher tagMatch = pattern.matcher(in);
while (tagMatch.find()) {
String parsed = parseTag(tagMatch.group(1);
// replace tagMatch.group(0) with parsed
}
然后我想用該方法的輸出替換整個標記。 我想過做的事情:
Pattern pattern = Pattern.compile("<:");
String split = pattern.split(in);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.length; i++){
if (i%2 == 0) sb.append(split[i]);
else sb.append(parseTag(split[i]);
}
String final = sb.toString();
final
在這里會給我我想要的東西,但這看起來很亂......
您可以使用Matcher
實例中的appendReplacement
和appendTail
方法。
嘗試
StringBuffer sb= new StringBuffer();
while (tagMatch.find()) {
//this will add text to buffer with replaced matched part
tagMatch.appendReplacement(sb, parseTag(tagMatch.group(1)));
}
tagMatch.appendTail(sb);//to add rest of input after last replacement
String result = sb.toString();
System.out.println(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.