0
String output = "";
pattern = Pattern.compile(">Part\s.");
matcher = pattern.matcher(docToProcess);
while (matcher.find()) {
      match = matcher.group();
}

>Part\s.上記のコードを使用して内部のパターン (大きな xml ドキュメントの文字列) を見つけようとしています。docToProcess次に、パターンに一致するコンテンツを次のように置き換えます。<ref></ref>

上記の置換outputを除いて変数を等しくする方法はありますか?docToProcess

編集: 交換時にマッチャーを使用する必要があります。私はちょうど使用することはできませんreplaceAll()

4

4 に答える 4

3

メソッドを使用できますString#replaceAll。それはRegex最初のパラメータとして取ります: -

String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");

は、だけでなくすべてに一致dot (.)する の特別なメタ文字であることに注意してください。したがって、 の後の文字と一致させたい場合を除き、エスケープする必要があります。また、Java でエスケープするには、バックスラッシュを 2 つ追加する必要があります。regexdot(.)>Part\\s


Matcherクラスを使用する場合は、 Matcher.appendReplacementメソッドを使用できます: -

 String docToProcess = "XYZ>Part .asdf";
 Pattern p = Pattern.compile(">Part\\s\\.");
 Matcher m = p.matcher(docToProcess);
 StringBuffer sb = new StringBuffer();
 while (m.find()) {
     m.appendReplacement(sb, "<ref></ref>");
 }
 m.appendTail(sb);
 System.out.println(sb.toString());

出力 : -

"XYZ<ref></ref>asdf"
于 2012-11-22T13:20:28.357 に答える
1

これはあなたが必要とするものです:

String docToProcess = "... your xml here ...";
Pattern pattern = Pattern.compile(">Part\\s.");
Matcher matcher = pattern.matcher(docToProcess);
StringBuffer output = new StringBuffer();
while (matcher.find()) matcher.appendReplacement(output, "<ref></ref>");
matcher.appendTail(output);

StringBuilder残念ながら、 Java API の歴史的な制約により、 を使用することはできません。

于 2012-11-22T13:28:38.663 に答える
0
docToProcess.replaceAll(">Part\\s[.]", "<ref></ref>");
于 2012-11-22T13:20:43.863 に答える
0
String output = docToProcess.replaceAll(">Part\\s\\.", "<ref></ref>");
于 2012-11-22T13:20:51.850 に答える