我的代码有很多个if语句,怎么写让它简短?

autumn1987 2010-05-13 09:27:22
if((line.indexOf('-')!= line.lastIndexOf('-')))
{
if(pre!="出版")
{
time.add(pre);
}
}
else
if(line.endsWith("aaa") )
{
pub.add(pre);
}
else
{
//java判断是否是数字
Pattern pattern = Pattern.compile("\\d{6,9}");
// p(pattern.matcher(line).matches());
if(pattern.matcher(line).matches()==true && pre != "bbb")
{
words.add(pre);
}
else
{
pattern = Pattern.compile("\\d{3,4}");
if(pattern.matcher(line).matches()==true && pre != "ccc")
{
page.add(pre);
}
else
{
if( (line.contains("cc")|| line.contains("ccc")) && pre != "开本")
{
size.add(pre);
}
else
{
if( (line.startsWith("9")|| line.startsWith("7") && line.length()==13) && pre != "rt")
{
isbn.add(pre);
}
else
{
if( (line.contains("dd")|| line.contains("ddd")) && pre != "d")
{
pack.add(pre);
}
}
}
}
}


这个只是一部分if语句,还有很多,我想让它简短点,应该怎么写,switch想不出来应该怎么写,不知道有没有其他的方法,大家帮忙看看,谢谢!
...全文
507 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2010-05-14
  • 打赏
  • 举报
回复
就像楼上很多说的
1.逻辑整理清楚 易于清晰分支
2.不要有太多if else嵌套 严重影响可读性
3.可能的话,分离其中业务逻辑内聚的部分为一个method,method须有足够代表性和提示性(重构法:Extract Method)
4.可以的话,宁愿不要单一出口,并列多个if分支,反而使得许多条例更清
lvjaio5241 2010-05-14
  • 打赏
  • 举报
回复
太乱了,你就不能注意格式呀,就那点还多
yuyeyi 2010-05-13
  • 打赏
  • 举报
回复
恩JDK7支持switch使用String
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 autumn1987 的回复:]
引用 2 楼 keeya0416 的回复:
switch是不能作用于 string 的


好像是,我是想问能不能通过其他方法来实现?
如果一个程序有很多if,难道只能这么一个一个写么?有没有其他方法可以解决?
[/Quote]


JDK 1.7 支持switch 使用String。
  • 打赏
  • 举报
回复
需要看一下这个程序是做什么的,原始数据是什么,重构需要根据上下文,而不是一段莫名其妙的代码。
crazylaa 2010-05-13
  • 打赏
  • 举报
回复
if多就多呗,注释清晰就好。
wufengye12 2010-05-13
  • 打赏
  • 举报
回复
好象只能这样写吧
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ycnanevol 的回复:]

排版好点,这么点儿if else算啥 哈哈哈
[/Quote]

恩,更多的if else还有呢,多写点注释 正解
ycnanevol 2010-05-13
  • 打赏
  • 举报
回复
排版好点,这么点儿if else算啥 哈哈哈
dobe1987 2010-05-13
  • 打赏
  • 举报
回复
最新版的jdk貌似已经支持switch用string了
hackerster0324 2010-05-13
  • 打赏
  • 举报
回复
貌似你要重新整理逻辑了。。。
hackerster0324 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hackerster0324 的回复:]

哥们这想写貌似不行吧。。Java code
if(pre!="出版")
[/Quote]
不是要这个吗..
if(!"出版".equals(pre))
hackerster0324 2010-05-13
  • 打赏
  • 举报
回复
哥们这想写貌似不行吧。。
if(pre!="出版")
甲壳虫 2010-05-13
  • 打赏
  • 举报
回复
以我现在的经验,只能告诉你就这样吧,如果可能的话,可以写个方法,在匹配,我没试过,可以试试。
autumn1987 2010-05-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keeya0416 的回复:]
switch是不能作用于 string 的
[/Quote]

好像是,我是想问能不能通过其他方法来实现?
如果一个程序有很多if,难道只能这么一个一个写么?有没有其他方法可以解决?
autumn1987 2010-05-13
  • 打赏
  • 举报
回复
楼上 我现在用的就是这种啊
zhouyang0000 2010-05-13
  • 打赏
  • 举报
回复
用if{}else if(){}
keeya0416 2010-05-13
  • 打赏
  • 举报
回复
switch是不能作用于 string 的
autumn1987 2010-05-13
  • 打赏
  • 举报
回复
这里line是个字符串,就是文件里的每一行,对他进行判断,然后处理,不知道能不能用switch

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧