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()
答案 0 :(得分:3)
您可以使用String#replaceAll
方法。它需要Regex
作为第一个参数: -
String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");
请注意,dot (.)
是regex
中的一个特殊元字符,它匹配所有内容,而不仅仅是dot(.)
。所以,你需要逃避它,除非你真的想匹配>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"
答案 1 :(得分: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);
不幸的是,由于Java API的历史限制,您无法使用StringBuilder
。
答案 2 :(得分:0)
docToProcess.replaceAll(">Part\\s[.]", "<ref></ref>");
答案 3 :(得分:0)
String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");