代码简化帮助:在给定的情况下,有没有办法不使用百万if / else-if语句?

时间:2014-08-13 04:06:07

标签: java if-statement optimization simplify

我目前正在编写一个将英语转换为1337的小型翻译,我想知道是否有更有效的方法可以做到这一点。我目前使用下面编写的代码返回相应的字符串,因为它们被输入到函数中。我想优化这个(编码和内存)。在此先感谢您的帮助! : - )

if(b.equalsIgnoreCase(“a”){ return “@";}
else if(b.equalsIgnoreCase(“b”){ return “|3”;}
else if(b.equalsIgnoreCase(“c”){ return “<”;}
else if(b.equalsIgnoreCase(“d”){ return “|)”;}
else if(b.equalsIgnoreCase(“e”){ return “3”;}
else if(b.equalsIgnoreCase(“f”){ return “|*”;}
else if(b.equalsIgnoreCase(“g”){ return “6”;}
else if(b.equalsIgnoreCase(“h”){ return “/-/”;}
else if(b.equalsIgnoreCase(“i”){ return “!”;}
else if(b.equalsIgnoreCase(“j”){ return “_|”;}
else if(b.equalsIgnoreCase(“k”){ return “|<”;}
else if(b.equalsIgnoreCase(“l”){ return “1”;}
...
..
.

2 个答案:

答案 0 :(得分:3)

使用Map<String, String>,只需查找,

要将应用程序外部映射到应用程序,您可以创建属性文件并在加载时或在某些触发器上读取它以加载/刷新查找数据结构

答案 1 :(得分:1)

对于这个特定的例子,你可以利用字符可以是数组索引的事实:

String[] leet = new String[] { "@", "|3", "<", ... };

查询是:

public String toLeet(char ch) {
    return ('A' <= ch && ch <= 'Z' ? leet[ch - 'A'] :
        ('a' <= ch && ch <= 'z' ? leet[ch - 'a'] : String.valueOf(ch)));
}