1

我有一个包含许多<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(">") 会给出">"的第一个索引。我哪里做错了?

4

3 回答 3

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());
于 2012-07-12T08:04:22.607 回答
0

这是appendReplacementand appendTailidiom 的一个很好的用例:

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);
于 2012-07-12T08:09:20.737 回答
-1

尝试对正则表达式使用转义字符\\

于 2012-07-12T07:54:10.580 回答