Java 如何检查字符串是否只包含运算符?
如何检查字符串是否只包含运算符 代码:Java 如何检查字符串是否只包含运算符?,java,string,Java,String,如何检查字符串是否只包含运算符 代码: public void convertString(字符串s){ 字符串[]arr=s.split(“”); 对于(int i=0;i
public void convertString(字符串s){
字符串[]arr=s.split(“”);
对于(int i=0;i
在这一行中,“[(+=-*/^)]+”
接收错误:
非法字符范围(到
如何检查
字符串
是否只包含运算符?-
中的[]
具有特殊含义,例如[0-9]
添加转义字符,它应该可以工作<代码>[(+=\-*/^)]+您实际上有两个选项:
\-
而不是-
)将破折号转义。这将指示正则表达式引擎将破折号解析为文字破折号,而不是范围分隔符。这就是禅宗已经提到的
另一种方法是将破折号放在字符类的末尾。在我看来,这会使它更具可读性。OP使用
()
来捕获组,在这种情况下,在开始或结束时添加破折号可能不起作用。我不使用()来捕获组,它是放在matches()方法中的。你可以在开始处放置-
,使其失去特殊意义,所以你不需要逃避它--[-(+=*/^)]+
与问题无关,但您可能希望添加%
作为mod运算符。
public void convertString(String s){
String[] arr = s.split("");
for (int i = 0; i < arr.length ; i++) {
stringStack.push(arr[i]);
}
if (stringStack.peek().matches("[0-9]+")){
digitStack.push(Double.valueOf(stringStack.pop()));
}else if (stringStack.peek().matches("[(+=-*/^)]+")){
}
System.out.println(digitStack);
}
[(+=*/^)-]