java检查char是不是是switch case语句中的数字[关闭]

Posted

技术标签:

【中文标题】java检查char是不是是switch case语句中的数字[关闭]【英文标题】: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?

【问题讨论】:

这能回答你的问题吗? What is the best way to tell if a character is a letter or number in Java without using regexes? 【参考方案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 );
        
    

【讨论】:

以上是关于java检查char是不是是switch case语句中的数字[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

java基础之switch

java中switch case怎么表示范围

Java switch case语句

Switch基本知识

java 中switch

javaswitch case支持的7种数据类型