Use string in switch case in java
我需要将下面的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | String value = some methodx; if ("apple".equals(value)) { method1; } if ("carrot".equals(value)) { method2; } if ("mango".equals(value)) { method3; } if ("orange".equals(value)) { method4; } |
但我不确定我能得到什么价值。
Java(在版本7之前)不支持String/Case中的字符串。但您可以通过使用枚举来获得所需的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | private enum Fruit { apple, carrot, mango, orange; } String value; // assume input Fruit fruit = Fruit.valueOf(value); // surround with try/catch switch(fruit) { case apple: method1; break; case carrot: method2; break; // etc... } |
号
现在每个人至少都在使用Java 7,对吧?以下是原始问题的答案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | String myString = getFruitString(); switch (myString) { case"apple": method1(); break; case"carrot": method2(); break; case"mango": method3(); break; case"orange": method4(); break; } |
。
笔记
- 案例陈述相当于使用
String.equals 。 - 和往常一样,字符串匹配区分大小写。
- 根据文件,这通常比使用链接的
if -else 语句(如曹的回答)要快。
学习使用
因为
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | String value = some methodx; if ("apple".equals(value )) { method1; } else if ("carrot".equals(value )) { method2; } else if ("mango".equals(value )) { method3; } else if ("orance".equals(value )) { method4; } |
或者开始使用JDK7,它包括在
要降低圈复杂度,请使用地图:
1 2 3 4 |
或多态性
为了给出具体的emory答案,可执行代码如下:
1 2 3 |
用户是POJO,然后
1 | User user = map.get(USERNAME).call(); |
。
最后,调用的方法是:
1 2 3 4 5 |
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | String name,lname; name= JOptionPane.showInputDialog(null,"Enter your name"); lname= JOptionPane.showInputDialog(null,"Enter your father name"); if(name.equals("Ahmad")){ JOptionPane.showMessageDialog(null,"welcome"+name); } if(lname.equals("Khan")) JOptionPane.showMessageDialog(null,"Name :"+name +" Last name :"+lname ); else { JOptionPane.showMessageDialog(null,"try again" ); } }} |
号
Java 8支持String交换盒。
1 2 3 4 5 6 7 8 9 |
。
在JavaSE 7中实现了用开关语句来评估EDCOX1×7变量,因此它只在Java 7中工作。您还可以看看这个新特性是如何在JDK7中实现的。
我们可以只在数据类型兼容的int上应用开关:short、shor、byte、byte、int、integer、char、character或enum类型。
以下是一种可能的1.7之前版本的方法,我不推荐:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | public class PoorSwitch { final static public int poorHash (String s) { long l = 0L; for (char c: s.toCharArray ()) { l = 97*l + c; } return (int) l; } public static void main (String args[]) { String param ="foo"; if (args.length == 1) { param = args[0]; } // uncomment these lines, to evaluate your hash // test ("foo"); // test ("bar"); switch (poorHash (param)) { // this doesn't work, since you need a literal constant // so we have to evaluate our hash beforehand: // case poorHash ("foo"): { case 970596: { System.out.println ("Foo!"); break; } // case poorHash ("bar"): { case 931605: { System.out.println ("Bar!"); break; } default: { System.out.println ("unknown\t" + param); break; } } } public static void test (String s) { System.out.println ("Hash:\t" + s +" =\t" + poorHash (s)); } } |
。
也许您可以在生成的代码中使用这种技巧。否则我不能推荐。这并不是说哈希冲突的可能性让我担心,但是如果有什么东西被混淆了(剪切和粘贴),就很难找到错误。931605不是一个好文件。
把它当作概念的证明,当作好奇心。
Java不支持带字符串的切换实例。我想这个链接可以帮助你。:)
不是很漂亮,但这里有另一种方法:
1 2 3 4 5 6 7 8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | String value = someMethod(); switch(0) { default: if ("apple".equals(value)) { method1(); break; } if ("carrot".equals(value)) { method2(); break; } if ("mango".equals(value)) { method3(); break; } if ("orance".equals(value)) { method4(); break; } } |