如何为Switch Case语句设置空或非空条目?

6l7fqoea  于 2022-09-21  发布在  其他
关注(0)|答案(2)|浏览(330)

我想知道如何设置一个条目来验证Switch-Case语句中的字符串是否为空。让我向你展示:

String str = 'value'
switch(str){
    case str == '':
        println('Entered an empty value')
        break
    case str != '':
        println('Entered value '+str)
        break
    case 'CoDe':
        println('Entered special code '+str)
        break
    default:
        println('Incorrect entry')
        break
}

我知道如何设置带有值的条目(案例3),但我不知道如何设置带有空或非空字符串值的条目。

有什么帮助吗?

a9wyjsp7

a9wyjsp71#

我测试过了,我想我有答案了。

switch(str) {
        case "": // empty
            println("Entered an empty value")
            break
        case "CoDe": // str == CoDe
            println("Entered special code "+str)
            break
        default: // String not empty and not "CoDe"
            println("Not empty")
            break
    }

它之所以有效,是因为您有case "",它是空字符串。这意味着其他一切都不是空的。其他所有内容都是默认设置:

如果你不信服,我可以给你一个相同含义的不同例子。

if (str.isEmpty()) {
       // do something
    } else if (!str.isEmpty()) { // <- this if is redundant
       // do something else
    }

您不需要第二个,因为只有在str不为空的情况下才进入Else分支!我将同样的逻辑应用于此案。它之所以有效,是因为Java中的case "":是有效的。

ha5z0ras

ha5z0ras2#

正如所评论的,在Java中您需要的是一系列if测试。

String类中,您可以测试:

  • 字符串没有任何字符(isEmpty)
  • 字符串没有字符或只有空格字符(isBlank)
if ( str.isEmpty() ) { System.out.println( "ERROR - String has no characters." ); }
else if ( str.isBlank() ) { System.out.println( "ERROR - String has only whitespace." ); }
else if ( str.equals( "CoDe" ) ) { System.out.println( "Code received." ); }
else { System.out.println( "ERROR - Incorrect entry." ); }

看那个code run live at Ideone.com

在该代码块之前,我会添加一个空检查。

Objects.requireNonNull( str ); // Throw exception if null.

我发现Java中的if - else if - else结构在可读性方面很笨拙。switch语法在显示正在测试的一系列可能性方面要好得多,这些可能性是相互排斥的,只有一个结果。

我真希望Java能为一系列布尔表达式提供级联测试。我曾在另一种语言中使用过这样的功能。在那里,我发现级联布尔测试对于处理一系列业务规则非常实用。但是,唉,Java中没有这样的功能。要是布莱恩·戈茨接我的电话就好了。

我不认识Groovy。也许Groovy提供了另一种工具。

相关问题