iteye_7642 2008-12-23 00:25
浏览 557
已采纳

java中能将字符串赋给枚举类型吗?怎样用switch代替if-else?

想简化下面的代码,用switch语句代替if语句来提高效率,但是不知道switch()括号中的判别式怎么写,请各位帮忙,谢谢!
public void Text_identify(File f) {
HashMap GlobalMode = new HashMap();
String[] input = readAllFile(f).replaceAll(" ", ";").split(";");

for (int i = 0; i < input.length; i++) {
String re = input[i].replace(",", " ").trim();

   if (re.startsWith("Book Title")) {
 booktitle = input[i].substring(input[i].indexOf("-") + 2);
 GlobalMode.put("booktitle", booktitle);
      contiue;
}

   if (re.startsWith("Chapter Title")) {
title = input[i].substring(input[i].indexOf("-") + 2);
GlobalMode.put("title", title);
      contiue;
}

// 多个作者识别
   if (re.startsWith("Author")) {
StringBuffer au = new StringBuffer();
author = au.append(input[i].substring(input[i].indexOf("-") + 2)).toString();
     String authorNames = GlobalMode.get("author");
authorNames = (authorNames == null) ? author : (authorNames + "," + author);
GlobalMode.put("author", authorNames);
     contiue;
}


  if (re.startsWith("Copyright")) {
year = input[i].substring(input[i].indexOf("-") + 2);
GlobalMode.put("year", year);
contiue;
       }
if (re.startsWith("isbn")) {
isbn = input[i].substring(input[i].indexOf("-") + 2);
GlobalMode.put("isbn", isbn);
contiue;
      }

}

补充:目的是处理这样的文本:

 Book Series - 
Book Title  - Graph Drawing
Chapter Title  - VGJ: Visualizing Graphs Through Java
First Page  - 454
Last Page  - 455
Copyright  - 1998
Author  - Carolyn McCreary
Author  - Larry Barowski

识别BookTitle = 对应值;author=对应值;..

[b]问题补充:[/b]
不能用switch,那有没有其他简单高效的方法来代替如此多重复的if-else呢?
[b]问题补充:[/b]
我试着用enum了,但是不知道怎么把字符串赋给enum,还有就是switch中的判别式不知道如何写,能否详细说一下呢?谢谢!
[b]问题补充:[/b]
1. 代码里变量booktitle, title, author, year, isbn是用来存放他们的对应值,在其他方法里也用到了
2. Java代码
String[] input = readAllFile(f).replaceAll(" ", ";").split(";"); 这里replace完再split确实没必要,我已经按你的方法修改了。
3. globalMode最后要返回给方法调用者,我最后想要的是:可以自己定义booktitle, title, author, year, isbn对应值的显示顺序。像参考文献那样的格式。

  • 写回答

11条回答 默认 最新

  • dch1287 2008-12-23 19:56
    关注

    不用switch的那个方法稍作修改
    [code="java"]
    public void textIdentify(File f)
    {
    HashMap globalMode = new HashMap();
    String[] input = readAllFile(f).replaceAll(" ", ";").split(";");
    for (int i = 0; i < input.length; i++)
    {
    String re = input[i].replace(",", " ").trim();
    String[] reSplited = re.split(" - ");

            String key = KEY_MAP.get(reSplited[0]);
    
            if (key == "Author")
            {
                String authorNames = globalMode.get(key);
                authorNames = (authorNames == null) ? reSplited[1] : (authorNames
                        + "," + reSplited[1]);
    
                globalMode.put(key, authorNames);
            }
            else
            {
                globalMode.put(key, reSplited[1]);
            }
        }
    }
    

    [/code]

    有点疑问的地方
    1. 你的代码里变量booktitle, title, author, year, isbn分别是做什么用处的, 如果仅这个方法里面用, 那么可以想我那样, 直接不用.
    2. [code="java"]String[] input = readAllFile(f).replaceAll(" ", ";").split(";");[/code]
    这里replace完再split是否有必要, 是否可以直接
    [code="java"]String[] input = readAllFile(f).split("" "");[/code]
    3. [code="java"]String re = input[i].replace(",", " ").trim();[/code]

    2,3两个代码我觉得比较奇怪, 不过你可能有你自己的意图啦.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)