Java 替换字符串中的模式匹配项

Java 替换字符串中的模式匹配项,java,regex,pattern-matching,Java,Regex,Pattern Matching,我试图使用上面的代码在docToProcess(这是一个大型xml文档的字符串)中查找模式>Part\s.,然后我想做的是将与模式匹配的内容替换为 除了上面提到的替换之外,我如何使输出变量等于docToProcess 编辑:我需要在替换时以某种方式使用匹配器。我不能只使用replaceAll()您可以使用这个方法。它将Regex作为第一个参数:- String output = ""; pattern = Pattern.compile(">Part\s."); matcher = pat

我试图使用上面的代码在
docToProcess
(这是一个大型xml文档的字符串)中查找模式
>Part\s.
,然后我想做的是将与模式匹配的内容替换为

除了上面提到的替换之外,我如何使
输出
变量等于
docToProcess

编辑:我需要在替换时以某种方式使用匹配器。我不能只使用
replaceAll()

您可以使用这个方法。它将
Regex
作为第一个参数:-

String output = "";
pattern = Pattern.compile(">Part\s.");
matcher = pattern.matcher(docToProcess);
while (matcher.find()) {
      match = matcher.group();
}
输出:-

 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());
“XYZasdf”
您可以使用方法。它将
Regex
作为第一个参数:-

String output = "";
pattern = Pattern.compile(">Part\s.");
matcher = pattern.matcher(docToProcess);
while (matcher.find()) {
      match = matcher.group();
}
输出:-

 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());
“XYZasdf”
docToProcess.replaceAll(“>Part\\s[.]”,“”);
docToProcess.replaceAll(“>Part\\s[.]”,“”);
String输出=docToProcess.replaceAll(“>Part\\s\\”,”);
String输出=docToProcess.replaceAll(“>Part\\s\\”,”);
这就是您需要的:

String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");
String docToProcess=“…您的xml在此…”;
Pattern=Pattern.compile(“>Part\\s.”);
Matcher Matcher=pattern.Matcher(docToProcess);
StringBuffer输出=新的StringBuffer();
while(matcher.find())matcher.appendReplacement(output“”);
matcher.appendTail(输出);
不幸的是,由于Java API的历史限制,您无法使用
StringBuilder

这就是您需要的:

String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");
String docToProcess=“…您的xml在此…”;
Pattern=Pattern.compile(“>Part\\s.”);
Matcher Matcher=pattern.Matcher(docToProcess);
StringBuffer输出=新的StringBuffer();
while(matcher.find())matcher.appendReplacement(output“”);
matcher.appendTail(输出);


不幸的是,由于Java API的历史限制,您无法使用
StringBuilder

String.replaceAll()无法使用它??奇怪的是,如果已经在使用完整的
Matcher
API,那么在循环之后就是
Matcher.appendReplacement
Matcher.appendTail
。我尝试了
replaceAll()
replace()
,但它们都有问题。如果你能告诉我一些你将如何做的代码?也许我只是尝试了错误的事情。。。我会粘贴我所做的,但我更改了它,不再有了。@ThreaT“haved problems”不是很好的描述。如果需要帮助,请始终描述问题所在
replaceAll
完全是为您所做的,您需要一个相当令人信服的理由来采用更复杂的方法。@MarkoTopolnik:是的,您走的是对的,如果您能用它来回答,那么我会将其标记为正确的回答字符串。replaceAll()不会这样做??奇怪的是,如果已经在使用完整的
Matcher
API,那么在循环之后就是
Matcher.appendReplacement
Matcher.appendTail
。我尝试了
replaceAll()
replace()
,但它们都有问题。如果你能告诉我一些你将如何做的代码?也许我只是尝试了错误的事情。。。我会粘贴我所做的,但我更改了它,不再有了。@ThreaT“haved problems”不是很好的描述。如果需要帮助,请始终描述问题所在
replaceAll
完全是为你所做的,你需要一个相当有说服力的理由来采用更复杂的方法。@MarkoTopolnik:是的,你走的是对的,如果你能用它来回答,那么我会把它标记为正确的答案!!只是在我的回答中添加了同样的内容+答案是:)@RohitJain我不认为OP想逃离这个点。我会把它拿走。@Marko。。是的,问题不清楚,所以我不能支持我的评论。最好保留原件:)@Downvoter。。我不明白,为什么对这个答案投反对票???@RohitJain这是OP,他想取消他的赞成票,但投了反对票(我猜是错的)。啊!!只是在我的回答中添加了同样的内容+答案是:)@RohitJain我不认为OP想逃离这个点。我会把它拿走。@Marko。。是的,问题不清楚,所以我不能支持我的评论。最好保留原件:)@Downvoter。。我不明白,为什么对这个答案投反对票???@RohitJain这是OP,他想取消他的赞成票,但投了反对票(我猜是错误的)。哈哈,我想把你和Marko的答案都记对,因为他先得到了,但你的答案很好。不知道该怎么办do@ThreaT.. 啊!!在标记任何答案时不要感到困惑。只要标出最好的。如果两个是相同的,只需标记你觉得最先得到的那个。所以,马克·马尔科的答案是肯定的。没问题:)你能做的是,在你没有标为“接受”的答案上加上一个追加投票@威胁我写我的答案是因为你特别要求我:)否则我会留下来评论的。告诉你吧。我要投你的一票,给马克一个正确的答案。你的选票会比他的多。@你本可以把我的答案取消。现在你实际上已经投了反对票,这并不是一个你不想惩罚的答案的习惯做法。哈哈,我想把你和Marko的答案记对,因为他先得到了答案,但是你的答案很好。不知道该怎么办do@ThreaT.. 啊!!在标记任何答案时不要感到困惑。只要标出最好的。如果两个是相同的,只需标记你觉得最先得到的那个。所以,马克·马尔科的答案是肯定的。没问题:)你能做的是,在你没有标为“接受”的答案上加上一个追加投票@威胁我写我的答案是因为你特别要求我:)否则我会留下来评论的。告诉你吧。我要投你的一票,给马克一个正确的答案。你的选票会比他的多。@你本可以把我的答案取消。现在你真的投了反对票,这不是真的
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);