【问题标题】:java check if char is number in switch case statment [closed]java检查char是否是switch case语句中的数字[关闭]
【发布时间】:2021-05-31 05:07:28
【问题描述】:

我有一个 switch case 检查 char 是 "=" 或 "-" 还是 "+" 但我也想检查 char 是否是 0-9 之间的数字

    public static Token get(char ch) {
            switch (ch) {
                case '-' :
                case '+':
                case '=':
                    return new Token(ch);
                case  Character.isDigit(ch): // this dosn't work
                {
                }
            }
        }

我可以用什么替换 Character.isDigit?

【问题讨论】:

标签: java switch-statement isnumeric


【解决方案1】:

您可以为十位字符定义明确的case 语句:

public static Token get(char ch) {
    switch (ch) {
        case '-' :
        case '+':
        case '=':
            return new Token(ch);
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            // handle digit case
            break;
    }
}

这里注意,我们只是让所有的数字字符case都流到一个点来处理。

【讨论】:

    【解决方案2】:

    这是行不通的,因为 switch case 会将您的 char ch 变量与 switch case 进行比较以获得匹配。 Character.isDigit(ch): 返回一个布尔值,不能与char ch 直接比较。

    我会建议您在默认情况下检查您的状况的替代方法。

    public static Token get(char ch) {
        switch (ch) {
            case '-' :
            case '+':
            case '=':
                return new Token(ch);
            default:
            if(Character.isDigit(ch){
                //enter code here
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      其他答案是正确和好的。我要补充两点:

      • 为您的逻辑使用switch 语句可能会使意图变得模糊而不是澄清它。在您的特定情况下使用一系列if-then 可能更有意义。
      • Java 中的 char 类型已过时,甚至无法表示 Unicode 中定义的一半字符。虽然在此特定代码中使用char 会起作用,但我建议您不要养成使用char 的习惯。相反,请学习使用code point 整数。

      您可以轻松确定代码点。

      String input = "?";
      int codePoint = input.codePointAt( 0 );
      

      128567

      调用 Character.toString 以获取包含单个字符的 String 对象,该字符由该特定代码点整数表示。

      示例代码。

      public class Token
      {
          public static Token get ( int codePoint )
          {
              if ( "-+=".contains( Character.toString( codePoint ) ) )
              {
                  // Do operator stuff.
                  return new OperatorToken( codePoint );
              } else if ( Character.isDigit( codePoint ) )
              {
                  // Do digit stuff.
                  return new DigitToken( codePoint );
              } else
              {
                  // Do default stuff.
                  return new DefaultToken( codePoint );
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-10
        相关资源
        最近更新 更多