String.split() 在元字符 +

2022-09-01 07:32:00

我正在制作一个简单的程序,它将处理来自方程的字符串输入的方程,但是当我运行它时,由于尝试将“ +”替换为“ +”,因此我可以获得一个异常,因此我可以在空格处拆分字符串。我应该如何使用

字符串替换所有方法来替换这些特殊字符?以下是我的代码

线程“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);

答案 1

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

+是一个特殊字符,表示表示一个或多个出现的量词。因此,应该对它进行转义以指定文字字符:+

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

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

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

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

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

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

答案 2

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

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