【问题标题】:How to check if String contains only operators? [duplicate]如何检查字符串是否仅包含运算符? [复制]
【发布时间】:2020-11-09 18:42:02
【问题描述】:

如何判断String是否只包含操作符?

代码:

 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);

}

在这一行"[(+=-*/^)]+" 接收错误:

Illegal character range (to &lt; from)

如何检查String是否只包含操作符?

【问题讨论】:

  • 与问题无关,但您可能需要添加 % 作为 mod 运算符。

标签: java string


【解决方案1】:

- in [ ] 有特殊含义,例如[0-9].

添加一个转义字符,它应该可以工作。 [(+=\-*/^)]+

【讨论】:

  • 另一种方法是将破折号放在字符类的末尾。在我看来,它会让它更具可读性。
  • OP 使用( ) 捕获组,在这种情况下添加破折号开始或结束可能不起作用。
  • 我不是用 ( ) 来抓组的,是放在matches()方法里
  • 你可以把-放在开头,让它失去特殊意义,所以你不需要转义——[-(+=*/^)]+
【解决方案2】:

你实际上有两个选择:

  1. 用反斜杠转义破折号(\- 而不是-)。这将指示正则表达式引擎将破折号解析为文字破折号,而不是范围分隔符。这就是 Zen 已经提到的。

  2. 第二个选项是将破折号放在字符类的开头或结尾。如果破折号位于任一位置,则正则表达式引擎知道破折号不是字符范围的一部分。

    [(+=*/^)-]
    

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 2011-03-29
    • 2020-09-20
    • 2018-08-25
    • 2016-01-25
    • 2011-04-04
    • 2018-09-03
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多