2013-04-25 42 views
27

我正在做一个简单的程序,将处理方程的字符串输入方程 当我运行它时,但是,我得到一个异常,因为试图替换“+”带“+”,所以我可以在空格处分割字符串。我应该如何去使用元字符String.split()+

字符串replaceAll方法来替换这些特殊字符?下面是我的代码

异常线程 “main” 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

'+'是一个正则表达式中的元字符,在正则表达式中使用“\\ +”会做。 – 2013-04-25 14:36:23

回答

43

replaceAll接受一个正则表达式它的第一个论点。

+是一个特殊字符,表示量词的含义一次或多次出现。因此,应当逃到指定文字字符+

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

(字符串是不可变,因此有必要将变量分配给的replaceAll结果);

对此的一个替代方案是使用一个character class其去除元字符状态:

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

最简单的方案,虽然是使用其使用非正则表达式String文字的replace方法:

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

谢谢,工作完美。我也尝试了rightside.replace(“+”,“+”)成功,但我不知道为什么这个工作。 – apache 2013-04-25 14:47:11

+0

''rightside.replace(“+”,“+”)''作为'String.replace'在其目标(第一个)参数中不使用正则表达式..... – Reimeus 2015-04-28 18:49:13

1

String#replaceAll预计regex作为输入,而+是不正确的模式,\\+将模式。 rightside.replaceAll("\\+", " +");

2

我与regex = "?"有类似的问题。它发生在所有在正则表达式中都有一定含义的特殊字符。所以你需要有"\\"作为你的正则表达式的前缀。

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