Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 572|回复: 0

解决java switch……case不能匹配字符串的问题

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-1 11:31:08 | 显示全部楼层 |阅读模式

    java1.7已经支持了匹配字符串

    方案1.

     1 enum Animal {  
     2 
     3     dog,cat,bear;
     4 
     5      public static Animal getAnimal(String animal){  
     6 
     7        return valueOf(animal );  
     8 
     9     }   
    10 
    11 }
    12 
    13  
    14 
    15 public class Client {  
    16 
    17    public void caseAnimal(String animal){  
    18 
    19        switch(Animal.getAnimal(animal)){  
    20 
    21        case cat:  
    22 
    23            System.out.println("this is a cat");  
    24 
    25            break;  
    26 
    27        case dog:  
    28 
    29            System.out.println("this is a dog");  
    30 
    31            break;  
    32 
    33        case bear:  
    34 
    35            System.out.println("this is a bear");  
    36 
    37            break;  
    38 
    39        }  
    40 
    41    }
    42 
    43    
    44 
    45   public static void main(String[] args) {
    46 
    47       Client client = new Client();  
    48 
    49        client.caseAnimal("cat"); 
    50 
    51 } 
    52 
    53 } 

     

     方案2

     1 enum Seasons{
     2 
     3          SPRING,SUMMER,AUTUMN,WINTER
     4 
     5 }
     6 
     7 public class TestMultiInterface{
     8 
     9          public static void main(String[] args){
    10 
    11                    Seasons str=Seasons.SPRING;
    12 
    13                    switch(str.ordinal()){
    14 
    15                    case 0:
    16 
    17                    System.out.println(str.toString());
    18 
    19                    break;
    20 
    21                    case 1:
    22 
    23                    System.out.println(str.toString());
    24 
    25                    break;
    26 
    27                    default:
    28 
    29                    System.out.println("没找到");
    30 
    31                    }
    32 
    33          }
    34 
    35 }

     

    方案3

     1 public void switchCase() { 
     2 
     3   Map<String,Integer> map=new HashMap<String, Integer>(); 
     4 
     5   map.put("中国", 1); 
     6 
     7   map.put("美国", 2); 
     8 
     9   map.put("英国", 3); 
    10 
    11   map.put("法国", 4); 
    12 
    13    
    14 
    15   String str="中国"; 
    16 
    17   switch(map.get(str)) 
    18 
    19   {       
    20 
    21    case 1: 
    22 
    23         System.out.println("中国"); 
    24 
    25         break; 
    26 
    27     case 2: 
    28 
    29         System.out.println("美国"); 
    30 
    31        break; 
    32 
    33     case 3:
    34 
    35         System.out.println("英国");
    36 
    37        break;
    38 
    39     case 4: 
    40 
    41        System.out.println("法国"); 
    42 
    43        break;   
    44 
    45    default: 
    46 
    47     System.out.println("default"); 
    48 
    49   } 
    50 
    51  } 

     

    方案4

     1 String str1 = "aa";
     2 
     3         String[] str2 = {"bb", "aa", "cc", "aaa"};
     4 
     5         for (int i = 0; i < str2.length; ++i){
     6 
     7             switch (str1.compareTo(str2)) {
     8 
     9               case 0: System.out.println("OK");
    10 
    11                       break;
    12 
    13               default: System.out.println("Error");
    14 
    15                         break;
    16 
    17             }
    18 
    19         }

     

     

    方案5

     1 public class Client {
     2 
     3          public Client(String animal) {
     4 
     5                    //使用String的hasCode取得字符串的哈希码,此方法要保证哈希码不重复
     6 
     7                    switch (animal.hashCode()) {
     8 
     9                    case 98262:
    10 
    11                             System.out.println("this is a cat");
    12 
    13                             break;
    14 
    15                    case 99644:
    16 
    17                             System.out.println("this is a dog");
    18 
    19                             break;
    20 
    21                    case 3019700:
    22 
    23                             System.out.println("this is a bear");
    24 
    25                             break;
    26 
    27                    }
    28 
    29          }
    30 
    31  
    32 
    33          public static void main(String[] args) {
    34 
    35                    Client client = new Client("bear");
    36 
    37          }

     

     方案6  如果是在使用简单工厂设计模式,可以考虑利用java反射技术代替switch

     1 public static UserDao createUser(){
     2   Animal animal=null;
     3   try {
     4    iu=(Animal) Class.forName(Animal接口下子类的完整类名).newInstance();
     5   }catch (Exception e) {
     6    e.printStackTrace();
     7   }
     8   return animal;
     9 
    10  }

     

    以上方案,有的是从网上收集来的,有的是自己原创的,因为时间过长,已经不记得从哪个地方摘抄下来的,没有注明转载的地方,十分抱歉!

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-4 06:43 , Processed in 0.064708 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表