Java Switch语句-“或”/“和”是否可能?

eimct9ow  于 2023-02-11  发布在  Java
关注(0)|答案(6)|浏览(197)

我实现了一个字体系统,它通过char switch语句找到要使用的字母。我的字体图像中只有大写字母。我需要这样做,例如,'a'和'A'都有相同的输出。与其有两倍的大小写,不如像下面这样:

char c;

switch(c){
case 'a' & 'A': /*get the 'A' image*/; break;
case 'b' & 'B': /*get the 'B' image*/; break;
...
case 'z' & 'Z': /*get the 'Z' image*/; break;
}

这在java中可能吗?

yftpprvb

yftpprvb1#

您可以通过省略break;语句来使用switch case fall through。

char c = /* whatever */;

switch(c) {
    case 'a':
    case 'A':
        //get the 'A' image;
        break;
    case 'b':
    case 'B':
        //get the 'B' image;
        break;
    // (...)
    case 'z':
    case 'Z':
        //get the 'Z' image;
        break;
}

...或者您可以在switch ing之前将其规范化为小写或大写。

char c = Character.toUpperCase(/* whatever */);

switch(c) {
    case 'A':
        //get the 'A' image;
        break;
    case 'B':
        //get the 'B' image;
        break;
    // (...)
    case 'Z':
        //get the 'Z' image;
        break;
}
roejwanj

roejwanj2#

在上面,您的意思是OR而不是AND。AND示例:110&011 == 010这两样都不是你要找的。
对于手术室,只有2个病例在第1天没有休息。例如:

case 'a':
case 'A':
  // do stuff
  break;
oxosxuxt

oxosxuxt3#

以上都是很好的答案,我只是想补充一点,当有多个字符需要检查时,如果使用if-else可能会更好,因为您可以改为编写以下内容。

// switch on vowels, digits, punctuation, or consonants
char c; // assign some character to 'c'
if ("aeiouAEIOU".indexOf(c) != -1) {
  // handle vowel case
} else if ("!@#$%,.".indexOf(c) != -1) {
  // handle punctuation case
} else if ("0123456789".indexOf(c) != -1) {
  // handle digit case
} else {
  // handle consonant case, assuming other characters are not possible
}

当然,如果这变得更复杂,我建议使用正则表达式匹配器。

fcipmucu

fcipmucu4#

对一个有趣的Switch case陷阱的观测--〉switchfall through

“break语句是必需的,因为如果没有它们,switch块中的语句将无法执行:“Java Doc's example

没有break的连续case的代码段:

char c = 'A';/* switch with lower case */;
    switch(c) {
        case 'a':
            System.out.println("a");
        case 'A':
            System.out.println("A");
            break;
    }

这种情况下的O/P为:
A
但是如果你改变c的值,也就是char c = 'a';,那么这就变得有趣了。
这种情况下的O/P为:
a A
即使第二个用例测试失败,程序仍继续打印A,因为缺少break,导致switch将其余代码视为块。匹配用例标签后的所有语句按顺序执行。

pvabu6sv

pvabu6sv5#

根据我对你的问题的理解,在把字符传入switch语句之前,你可以把它转换成小写,所以你不必担心大写,因为它们会自动转换成小写,为此你需要使用下面的函数:

Character.toLowerCase(c);
agyaoht7

agyaoht76#

  • 增强的开关/ case* / * 带箭头的开关 * 语法(Java 13起):
char c;
switch (c) {
    case 'A', 'a' -> {} // c is either 'A' or 'a'.
    case ...
}

相关问题