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()

4

4 回答 4

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());

输出 : -

"XYZ<ref></ref>asdf"
于 2012-11-22T13:20:28.357 回答
1

这就是你需要的:

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 的历史限制,您不能使用。

于 2012-11-22T13:28:38.663 回答
0
docToProcess.replaceAll(">Part\\s[.]", "<ref></ref>");
于 2012-11-22T13:20:43.863 回答
0
String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");
于 2012-11-22T13:20:51.850 回答