lam*_*ins 3 java string case char switch-statement
我正在尝试将用字母写的电话号码转换为真正的数字形式.我在for循环中有这个switch语句,它查看字符串的每个字符,但是eclipse说我有重复的情况('G'|'H'|'我','J'|'K'|' L','M'|'N'|'O')我不明白为什么?
switch(parts[1].charAt(i)){
case 'A' | 'B' | 'C' : number.concat("2"); break;
case 'D' | 'E' | 'F' : number.concat("3"); break;
case 'G' | 'H' | 'I' : number.concat("4"); break;
case 'J' | 'K' | 'L' : number.concat("5"); break;
case 'M' | 'N' | 'O' : number.concat("6"); break;
case 'P' | 'Q' | 'R' | 'S' : number.concat("7"); break;
case 'T' | 'U' | 'V' : number.concat("8"); break;
case 'W' | 'X' | 'Y' | 'Z' : number.concat("9"); break;
}
Run Code Online (Sandbox Code Playgroud)
好笑,我想我知道发生了什么.
执行此操作时'A' | 'B',您将对A和B 的字节值执行按位OR运算.您的IDE检测到一些结果值是等效的.这绝对不是你想要做的.
你想要的更像是:
case 'A':
case 'B':
case 'C':
number.concat("2");
break;
case 'D':
[...]
Run Code Online (Sandbox Code Playgroud)
等等.
有关详细信息,请参阅http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html上的 "SwitchDemo2" .
验证(使用Python):
>>> ord('G') | ord('H') | ord('I')
79
>>> ord('J') | ord('K') | ord('L')
79
Run Code Online (Sandbox Code Playgroud)
|代码中的字符代替按位OR运算符使用switch
switch(parts[1].charAt(i)){
case 'A':
case 'B':
case 'C':
number.concat("2");
break;
...
Run Code Online (Sandbox Code Playgroud)
查看这些bytevalues的结果
System.out.println('G' | 'H' | 'I');
System.out.println('J' | 'K' | 'L');
Run Code Online (Sandbox Code Playgroud)
两者都打印79
与switch语句关联的两个case常量表达式中没有两个可能具有相同的值.
阅读开关教程,了解如何使用穿透
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |