我制作了一个简单的程序,它将处理方程式的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);
答案 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方法也会出现同样的问题,因为它们也是基于正则表达式工作的。