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

これは、appendReplacementandappendTailイディオムの適切な使用例です。

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 に答える