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);
    
    }
    
    [(+=*/^)-]