我有一个包含许多<xxx>
值的字符串。
我想要检索<>
中的值,进行一些操作并将新值重新插入到字符串中。
我做的是
input = This is <abc_d> a sample <ea1_j> input <lmk_02> string
while(input.matches(".*<.+[\S][^<]>.*"))
{
value = input.substring(input.indexOf("<") + 1, input.indexOf(">"));
//calculate manipulatedValue from value
input = input.replaceFirst("<.+>", manipulatedValue);
}
但在第一次迭代后,值包含abc_d> a sample <ea1_j> input <lmk_02
。我相信indexOf(“&gt;”)将给出“&gt;”的第一个索引。我哪里出错了?
答案 0 :(得分:2)
这是完成您要做的事情的一种稍微简单的方法:
String input = "This is <abc_d> a sample <ea1_j> input <lmk_02> string";
Matcher matcher = Pattern.compile("<([^>]*)>").matcher(input);
StringBuffer sb = new StringBuffer();
while(matcher.find()) {
matcher.appendReplacement(sb, manipulateValue(matcher.group(1)));
}
matcher.appendTail(sb);
System.out.println(sb.toString());
答案 1 :(得分:0)
这是appendReplacement
和appendTail
成语的一个很好的用例:
Pattern p = Pattern.compile("<([^>]+)>");
Matcher m = p.matcher(input);
StringBuffer out = new StringBuffer():
while(m.find()) {
String value = m.group(1);
// calculate manipulatedValue
m.appendReplacement(out, Matcher.quoteReplacement(manipulatedValue));
}
m.appendTail(out);
答案 2 :(得分:-1)
尝试使用转义字符\\
到正则表达式。