如何在switch-case语句中设置空与非空字符串的分支?
如何在Groovy的switch-case中判断字符串空或非空
你当前的代码写法存在问题:switch(str)会拿字符串str和每个case后的值做匹配,但你写的case str == ''是一个布尔值(true/false),字符串和布尔值类型不匹配,所以这些分支永远不会触发。
下面是两种正确的实现方式:
方式一:将switch表达式设为true,直接匹配条件
这种方式把switch的判断对象设为true,每个case对应布尔条件,符合常规条件判断逻辑:
String str = 'value' switch(true) { case str.isEmpty(): // 用isEmpty()判断空字符串更规范 println('Entered an empty value') break case str == 'CoDe': // 特殊值分支要放在非空判断前面 println('Entered special code ' + str) break case str != '': println('Entered value ' + str) break default: println('Incorrect entry') break }
方式二:利用Groovy的闭包匹配特性
Groovy的switch支持闭包作为case分支,闭包接收switch的表达式作为参数(这里就是str),返回布尔值判断是否匹配:
String str = 'value' switch(str) { case '': // 直接匹配空字符串字面量 println('Entered an empty value') break case 'CoDe': // 特殊值分支优先 println('Entered special code ' + str) break case { !it.isEmpty() }: // 闭包判断非空 println('Entered value ' + str) break default: println('Incorrect entry') break }
关键注意点
- 特殊值分支(比如
'CoDe')必须放在非空判断分支的前面,否则非空分支会先匹配到'CoDe',导致特殊分支无法触发。 - 判断空字符串推荐用
isEmpty()方法,比直接和''比较更符合Java/Groovy的规范。
内容的提问来源于stack exchange,提问作者Cristian Inda
相关产品推荐
相关产品推荐

