如何匹配这种模式?(Java/regex)
我需要转换字符串:
"%s blabla %s"
进入:
"%1$s blabla %2$s"
我的代码如下:
Pattern pattern = Pattern.compile("%s");
Matcher tokenMatcher = pattern.matcher(value);
int index = 1;
while(tokenMatcher.find()){
String replacement = "%"+String.valueOf(index++)+"\\$s";
value = tokenMatcher.replaceFirst(replacement);
System.out.println(value);
}
问题是程序进入无限循环,我不明白为什么。以某种方式%1$s
与%s
匹配
%1$s blabla %s
%2$s blabla %s
%3$s blabla %s
%4$s blabla %s
%5$s blabla %s
%6$s blabla %s
%7$s blabla %s
%8$s blabla %s
%9$s blabla %s
%10$s blabla %s
etc...
有什么想法吗
# 1 楼答案
尝试重置循环中的
tokenMatcher
# 2 楼答案
http://tutorials.jenkov.com/java-regex/matcher.html#8
# 3 楼答案
您必须用新值重置匹配器:
原因是replaceFirst()将匹配器重置为开头,但不会更改当前匹配的字符串,它仍然包含旧字符串。你必须自己更新匹配器
# 4 楼答案
试试下面的代码