String.split()处于元字符+

时间:2013-04-25 14:34:57

标签: java string special-characters

我制作了一个简单的程序,它将处理方程式的String输入中的方程式 然而,当我运行它时,由于试图替换" +"用" +"所以我可以在空格处分割字符串。我该如何使用

字符串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);

4 个答案:

答案 0 :(得分:51)

replaceAll接受正则表达式作为其第一个参数。

+是一个特殊字符,表示量词意味着一次或多次出现。因此,应该对其进行转义以指定文字字符+

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

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

另一种方法是使用character class删除元字符状态:

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

最简单的解决方案是使用使用非正则表达式String文字的replace方法:

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

答案 1 :(得分:3)

我与regex = "?"有类似的问题。它适用于在正则表达式中具有某些含义的所有特殊字符。因此,您需要"\\"作为正则表达式的前缀。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

这背后的原因是 - 正则表达式有保留字符。因此,当您使用 java split() 方法拆分它们时,您必须将它们与转义一起使用。 例如,您想按 + 或 * 或 dot(.) 进行拆分,则必须根据需要将其作为 split("\+") 或 split("\*") 或 split("\.") 进行.

我对正则表达式的长期解释背后的原因是 -

<块引用>

您也可能在其他地方遇到它。

例如,如果你使用java的replace或replaceAll方法也会出现同样的问题,因为它们也是基于正则表达式工作的。