这是原始字符串:
233<C:\Users\Grapes\Documents\title.png>233<C:\Users\Grapes\Documents\title.png>33
这是我想要的替换字符串:
233<1>233<2>33
我想用我上传到服务器后得到的id替换字符串中的文件路径,但是我的程序死循环了。
public void sendMessage(String msg) {
new Thread(()-> {
var pat = Pattern.compile("<(.*?[^\\\\])>");
var matcher = pat.matcher(msg);
int k = 0;
while (matcher.find()) {
matcher.replaceFirst("<" + k++ + ">"));
}
System.out.println(msg);
}).start();
}
最佳答案
您可以使用 Matcher#appendReplacement
:
String s = "233<C:\\Users\\Grapes\\Documents\\title.png>233<C:\\Users\\Grapes\\Documents\\title.png>33";
int k = 0;
StringBuffer result = new StringBuffer();
Matcher m = Pattern.compile("<[^<>]*>").matcher(s);
while (m.find()) {
m.appendReplacement(result, "<" + ++k + ">");
}
m.appendTail(result);
System.out.println(result.toString());
// => 233<1>233<2>33
参见 Java demo .
<[^<>]*>
pattern 在您的情况下就足够了,因为它将匹配 <
, 然后是 <
以外的任意 0 个或多个字符和 >
然后 <
.
关于java - 如何用正则表达式替换组的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55179209/