java检查char是否是switch case语句中的数字

问题描述

我有一个开关盒,用于检查字符是否为“=”或“-”或“+” 但我也喜欢检查 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?

解决方法

您可以为十位数字字符定义显式 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;
    }
}

注意,这里我们只是让所有数字字符的情况汇入一个点进行处理。

,

这行不通,因为 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
        }
    }
}
,

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

  • 对您的逻辑使用 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 );
        }
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...