RT
求解
求思路

解决方案 »

  1.   

    JDK1.5 的switch是不提供判断字符串类型的
    但是我现在要用,有没有什么变通的方法
      

  2.   

    swicth判断可能条件可能是boolean int char等类型 不能为于string 
      

  3.   

    if-else吧……
    或者改用枚举或整数代替字符串?
      

  4.   

    就是因为if else 太多了,所以要优化,我就想到用switch,只可惜1.5 不支持判断字符串,悲剧啊
      

  5.   

    没办法,这个特性只有JDK7才支持。
      

  6.   

    重写Objcet的equals方法,或写个方法去判断字符串
      

  7.   

    要不你把如
    switch (str) {
    case "a": break;
    case "b": break;
    }换成
    switch (str.hashCode()) {
    case "a".hashCode(): break;
    case "b".hashCode(): break;
    }
    这算变向的解决问题吧。
      

  8.   

    可以调用hashCode方法,这个方法返回一串数值,你只要比较两个哈希码是不是相同就可以了,不过我没试过
      

  9.   

    呵呵,这个主意不行,有可能的话,换成Enum试试,直观些。
      

  10.   

    hashCode的话,还是会有几率碰撞的,不过一般情况下碰到的几率应该不大……
    或者弄个字典,把要用到的字符串和整数做映射……
      

  11.   


    ENUM好不过不理解为啥非得用switch... 而且还得用string用switch
      

  12.   

    转换转换就行了,下面随便写个例子: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;
    }
    }
    }
      

  13.   

    字符串哪……不是一个字符………………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");
    }
    字符串->枚举的话可以这样
      

  14.   

    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里面去了
      

  15.   

    呵呵,原因就不得而知了,但是JDK7所说支持此功能,存在必有道理吧。Enum可以控制传入的参数,非常喜欢这个功能,可读性很强,总比1,2,3好得多。
      

  16.   

    public void switchMoeth(String str) {
    switch (str.hashCode()) {
    case 1: break; case 2: break;
    default:
    break;
    }
    }
      

  17.   


    常量也行 用Enum主要是Enum的值应该是可以随便定义的吧 大概吧 没用过 就算未来支持了switch(string) 估计用的也很少
      

  18.   

    if else 换成switch,你这是想优化效率还是优化可读性?感觉没太多必要。
    如果硬想要改用switch好看点,就把String映射成switch接受的类型或者enum,但这样效率不是下降了吗?
      

  19.   

    公司的规范,超过三个if else 必须进行优化
      

  20.   

    哈哈,超过三个if else就的优化!!
        看来还真的比较难控制了,  有点感觉 扯淡一样  用其他的方式去完成  还真不如用if else 来完成
      

  21.   

    可以构建一个Map集合将String 放入其中,通过传入key来进行判断
    这种方式不一定有上面的提出的方法好,不过可以一试
      

  22.   

    超过三个if else就的优化?你指的优化不就是让代码好看点么?可是为了提高(不一定提高)可读性而去使用绕弯的办法,还不如直接用if else。按照你说的,在PropertyChangeListener处理中,标示就是字符串,那么在
    void propertyChange(String prop, Object oldObj, Object newObj){
    }
    中怎么写
      

  23.   

    这个也是人家公司的代码规范,lz也是没办法的……
    真要说怎么办,牺牲点空间和效率用字典(Map啊Table啊之类)或者枚举转换也都是办得到的
      

  24.   

    没用if-else, 不知能否满足要求import java.io.*;
    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");
    }},
    });
    }
    }
      

  25.   

    可读性,当然还是switch好,但是效率上吗,现在的Java 已经经过优化,switch和if..else是一样的,我测试过。
    若是非要可读性的话,那么楼上有使用hashCode的应该是不错的选择。
      

  26.   

    感觉使用 if else 是比较便捷的,一次性多写几个就OK了。
    但是很多,很繁琐,
    如果你要在不使用 jdk 1.7的情况下在switch用这个符号的还是用hashCode吧,比较方便点,但是也可能碰撞。。
      

  27.   

    估计到了2012年jdk7出来的时候就可以了