我想给出一个输入String,迭代这个包含模式的String的每个子串,然后将这些子串应用于另一个模式,并以某种方式替换该部分。 这是代码:
public static String parseLinkCell1NoLost(String cell) {
String link = cell;
Pattern catPattern = Pattern.compile("\\{\\{(.*?)\\}\\}", Pattern.MULTILINE);
Matcher matcher = catPattern.matcher(cell);
while (matcher.find()) {
Pattern newP = Pattern.compile("\\{\\{nowrap|(.*?)\\}\\}", Pattern.MULTILINE);
Matcher m = newP.matcher(cell);
if (m.matches()) {
String rest = m.group(0);
String prov = m.group(1);
String[] temp = prov.split("\\|");
if (temp == null || temp.length == 0) {
return link;
} else {
link = link.replace(rest, temp[1]);
}
}
}
return link;
}
问题是我无法获得匹配每个matcher.find()
的子字符串。所以,如果我喜欢输入"{{nowrap|x}} {{nowrap|y}}"
,我想迭代两次并在第一个中获得子串{{nowrap|x}}
,在第二个中获得{{nowrap|y}}
。
提前谢谢。
答案 0 :(得分:1)
public static String parseLinkCell1NoLost(String cell) {
String link = cell;
Pattern catPattern = Pattern.compile("\\{\\{(.*?)\\}\\}", Pattern.MULTILINE);
Matcher matcher = catPattern.matcher(cell);
while (matcher.find()) {
Pattern newP = Pattern.compile("\\{\\{nowrap\\|(.*?)\\}\\}", Pattern.MULTILINE);
Matcher m = newP.matcher(matcher.group(0));
if (m.matches()) {
String rest = m.group(0);
String prov = m.group(1);
link = link.replace(rest, prov);
}
}
return link;
}
两个小错误:
matcher.group(0)
仅在每次迭代中使用你的匹配而不是整个单元格|
符号replace(..)
也可以简化