2013-04-25 10 views
27

私は方程式の文字列入力の方程式を扱う簡単なプログラムを作っています 私はそれを実行すると、 "+"を "+"にすると、スペースで文字列を分割できます。メタ文字のString.split()+

これらの特殊文字を置き換える文字列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); 
+6

'+'は正規表現のメタ文字です。正規表現では「\\ +」を使用してください。 –

答えて

43

replaceAllは、正規表現などを受け付け、インデックスの近くのメタ文字を '+' ダングリング最初の議論。

+は、を意味する限定記号を意味する特殊文字です.です。したがって、リテラル文字+指定するためにエスケープされなければならない:

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

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

これに代わるものは、メタキャラクタのステータスを除去character classを使用することである。

rightside = rightside.replace("+", " +"); 

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

最も簡単な解決策は、しかし、非正規表現Stringリテラルを使用replace方法を使用することであろう

+0

ありがとう、完璧に働いた。私もrightside.replace( "+"、 "+")を成功させましたが、なぜこれが機能するのか分かりません。 – apache

+0

'' rightside.replace( "+"、 "+") '' String.replace'は、そのターゲット(1st)引数に正規表現を使用していません..... – Reimeus

1

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

2

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

rightside = rightside.replaceAll("\\+", " +"); 
関連する問題