34

方程式の文字列入力から方程式を処理する簡単なプログラムを作成していますが、実行すると、「+」を「+」に置き換えようとしたために例外が発生し、文字列を分割できますスペースで。どのように使用すればよいですか

これらの特殊文字を置き換える文字列 replaceAll メソッド? 以下は私のコードです

スレッド「メイン」の例外 java.util.regex.PatternSyntaxException: メタ文字 '+' がインデックス 0 + ^ の近くにぶら下がっています

 public static void parse(String x){
       String z = "x^2+2=2x-1";

       String[] lrside =  z.split("=",4);
       System.out.println("Left side: " + lrside[0] + " / Right Side: " + lrside[1]);
       String rightside = lrside[0];
       String leftside = lrside[1];

       rightside.replaceAll("-", " -");
       rightside.replaceAll("+", " +");
       leftside.replaceAll("-", " -"); leftside.replaceAll("+", " +");
       List<String> rightt = Arrays.asList(rightside.split(" "));
       List<String> leftt = Arrays.asList(leftside.split(" "));

       System.out.println(leftt);
       System.out.println(rightt);
4

4 に答える 4

56

replaceAll最初の引数として正規表現を受け入れます。

+は、 1 回以上の出現を意味する量指定子を表す特殊文字です。したがって、リテラル文字を指定するにはエスケープする必要があります+

rightside = rightside.replaceAll("\\+", " +");

(文字列は不変であるため、変数を の結果に割り当てる必要がありますreplaceAll);

これに代わる方法は、メタキャラクター ステータスを削除する文字クラスを使用することです。

rightside = rightside.replaceAll("[+]", " +");

ただし、最も簡単な解決策は、replace非正規表現Stringリテラルを使用するメソッドを使用することです。

rightside = rightside.replace("+", " +"); 
于 2013-04-25T14:36:08.983 に答える
2

と同様の問題がありましregex = "?"た。正規表現で何らかの意味を持つすべての特殊文字で発生します。"\\"したがって、正規表現のプレフィックスとして持つ必要があります。

rightside = rightside.replaceAll("\\+", " +");
于 2014-05-26T06:48:56.777 に答える
1

String#replaceAllregex入力として期待し、+適切なパターンではありません。パターンに\\+なります。rightside.replaceAll("\\+", " +");

于 2013-04-25T14:36:57.063 に答える