转换转换就行了,下面随便写个例子:public class Main { public static void main(String[] args) { char ch = 'B'; int i = ch - 'A'; switch(i) { case 0: System.out.println("A"); break; case 1: System.out.println("B"); break; case 2: System.out.println("C"); break; default: System.out.println("Other"); break; } } }
字符串哪……不是一个字符………………enum E { aaa, bbb, ccc; }public static void main(String[] args) { String s = "aaa"; E en; try { en = E.valueOf(s); } catch (Exception e) { en = null; } if (en != null) switch (en) { case aaa: System.out.println("111"); break; case bbb: System.out.println("222"); break; case ccc: System.out.println("333"); break; default: break; } else System.out.println("000"); } 字符串->枚举的话可以这样
enum E { aaa, bbb, ccc; }public static void main(String[] args) { String s = "aaa"; try { E en = E.valueOf(s); switch (en) { case aaa: System.out.println("111"); break; case bbb: System.out.println("222"); break; case ccc: System.out.println("333"); break; default: break; } } catch (Exception e) { System.out.println("000"); } }改一下,索性放进try里面去了
但是我现在要用,有没有什么变通的方法
或者改用枚举或整数代替字符串?
switch (str) {
case "a": break;
case "b": break;
}换成
switch (str.hashCode()) {
case "a".hashCode(): break;
case "b".hashCode(): break;
}
这算变向的解决问题吧。
或者弄个字典,把要用到的字符串和整数做映射……
ENUM好不过不理解为啥非得用switch... 而且还得用string用switch
public static void main(String[] args) {
char ch = 'B';
int i = ch - 'A';
switch(i) {
case 0:
System.out.println("A");
break;
case 1:
System.out.println("B");
break;
case 2:
System.out.println("C");
break;
default:
System.out.println("Other");
break;
}
}
}
aaa, bbb, ccc;
}public static void main(String[] args) {
String s = "aaa";
E en;
try {
en = E.valueOf(s);
} catch (Exception e) {
en = null;
}
if (en != null)
switch (en) {
case aaa:
System.out.println("111");
break;
case bbb:
System.out.println("222");
break;
case ccc:
System.out.println("333");
break;
default:
break;
}
else
System.out.println("000");
}
字符串->枚举的话可以这样
aaa, bbb, ccc;
}public static void main(String[] args) {
String s = "aaa";
try {
E en = E.valueOf(s);
switch (en) {
case aaa:
System.out.println("111");
break;
case bbb:
System.out.println("222");
break;
case ccc:
System.out.println("333");
break;
default:
break;
}
} catch (Exception e) {
System.out.println("000");
}
}改一下,索性放进try里面去了
switch (str.hashCode()) {
case 1: break; case 2: break;
default:
break;
}
}
常量也行 用Enum主要是Enum的值应该是可以随便定义的吧 大概吧 没用过 就算未来支持了switch(string) 估计用的也很少
如果硬想要改用switch好看点,就把String映射成switch接受的类型或者enum,但这样效率不是下降了吗?
看来还真的比较难控制了, 有点感觉 扯淡一样 用其他的方式去完成 还真不如用if else 来完成
这种方式不一定有上面的提出的方法好,不过可以一试
void propertyChange(String prop, Object oldObj, Object newObj){
}
中怎么写
真要说怎么办,牺牲点空间和效率用字典(Map啊Table啊之类)或者枚举转换也都是办得到的
import java.net.*;
import java.util.*;class Noname13
{
public static void switch_string(String str, Object[] param)
{
for(int i=0;i<param.length;i+=2)
{
if(str.equals(param[i]))
((Runnable)param[i+1]).run();
}
} public static void main(String[] args)
{
System.out.println("Hello World!"); String a = "abc"; switch_string(a, new Object[]{
"a", new Runnable(){public void run(){
System.out.println("a");
}},
"ab", new Runnable(){public void run(){
System.out.println("ab");
}},
"abc", new Runnable(){public void run(){
System.out.println("abc");
}},
});
}
}
若是非要可读性的话,那么楼上有使用hashCode的应该是不错的选择。
但是很多,很繁琐,
如果你要在不使用 jdk 1.7的情况下在switch用这个符号的还是用hashCode吧,比较方便点,但是也可能碰撞。。