2

次のような形式を使用してテキストを置き換えたいと思います。

Text Input: (/ 5 6) + (/ 8 9) - (/ 12 3)
Pattern: (/ %s1 %s2)
Replacement: (%s1 / %s2)
Result: (5 / 6) + (8 / 9) - (12 / 3)

これを簡単に行う方法はありますか?Java API を調べましたが、文字列の書式設定 (このようなパターンには一致しません) と正規表現 (入力の一致した部分を出力の一部として使用できません) 以外は見つかりませんでした。

4

2 に答える 2

3

正規表現であり、これString.replaceAll(regex, replacement)が答えです。

正規表現は心のフェイント向けではありませんが、あなたの場合は次のようになります。

String result = input.replaceAll(
          "\\(\\s*(\\p{Punct})\\s+(\\d+)\\s+(\\d+)\\)",
          "($2 $1 $3)");

編集....エイドリアンの答えは私のものと「ほぼ」同じであり、あなたにより適しているかもしれません。私の答えは、「/」文字は「句読点」文字であり、「/」のみを処理するのではなく、結果にコピーする必要があると想定しています。

\p{Punct}技術的には、数学演算子だけが必要な場合は、次のようなものに置き換えることができます[-+/*](「-」が常に最初に来ることに注意してください)。

OK、実際の例:

    public static void main(String[] args) {
        String input = "(/ 5 6) + (/ 8 9) - (/ 12 3)";
        String regex = "\\(\\s*(\\p{Punct})\\s+(\\d+)\\s+(\\d+)\\)";
        String repl = "($2 $1 $3)";
        String output = input.replaceAll(regex, repl);
        System.out.printf("From: %s\nRegx: %s\nRepl: %s\nTo  : %s\n",
                input, regex, repl, output);
    }

プロデュース:

  From: (/ 5 6) + (/ 8 9) - (/ 12 3)
  Regx: \(\s*(\p{Punct})\s+(\d+)\s+(\d+)\)
  Repl: ($2 $1 $3)
  To  : (5 / 6) + (8 / 9) - (12 / 3)
于 2013-05-06T23:19:26.100 に答える