如果条件太多Java

时间:2017-09-11 08:48:27

标签: java if-statement conditional-statements

我有这段代码

if(beforeModify.get(i).equals("a")|beforeModify.get(i).equals("e")|beforeModify.get(i).equals("i")|
                    beforeModify.get(i).equals("o")|beforeModify.get(i).equals("u")|beforeModify.get(i).equals("á")|
                    beforeModify.get(i).equals("é")|beforeModify.get(i).equals("í")|beforeModify.get(i).equals("ě")|
                    beforeModify.get(i).equals("y")|beforeModify.get(i).equals("ý")|beforeModify.get(i).equals("ů")|
                    beforeModify.get(i).equals("ú"))

我可以做得更好吗?

6 个答案:

答案 0 :(得分:11)

您可以将其写为List.contains来电:

if (Arrays.asList("a", "e", etc).contains(beforeModify.get(i))

但您也可以预先构建Set,然后使用:

// Build once, keep the set to reuse.
Set<String> set = new HashSet<>(Arrays.asList("a", "e", etc));

if (set.contains(beforeModify.get(i)) 

HashSet的优势在于元素数量为O(1); ListO(n)

另外:您使用的是|,而不是||。前者将评估所有操作数,后者将在其中一个匹配时立即停止。您不需要对它们进行全面评估,因为文字参数上的String.equals没有副作用。使用||

答案 1 :(得分:1)

我喜欢Andy Turner的解决方案,这里也使用String而不是List of Set的其他解决方案:

解决方案1 ​​

String str = "aeiouáéíěyýůú";//put the characters you want to check in a string
String s = "z";
//you can use String.contains
if (s.length() == 1 && str.contains(s)) {
    //...
} 

解决方案2

//you can also use replaceAll non that char to check if it is correct or not
if (s.length() == 1 && !str.replaceAll("[^" + s + "]", "").isEmpty()) {
    //...
} 

解决方案3

// You can either use matches
if (str.matches(".*" + s + ".*")) {
    //...
}

ideon demo

答案 2 :(得分:1)

我说这是开关的经典案例:

switch(beforeModify.get(i)) {
    case "a":
    case "e":
// etc... 
}

它看起来更具可读性,其执行速度与if

一样快

答案 3 :(得分:0)

您可以对正则表达式使用match()方法

String input = beforeModify.get(i);
if(input.matches("a*e*i*o*u*á*é*í*ě*y*ý*ů*ú*") && input.length()==1)

or you could just use

if(input.matches("[aeiouáéíěyýůú]"))

答案 4 :(得分:0)

您也可以使用java 8流来完成。

beforeModify.stream()
.filter(x -> x.matches("[aeiouáéíěyýůú]"))
.forEach(x -> {

    /* Your code here */

});

答案 5 :(得分:0)

您可以尝试使用String.matches(String regex)方法使用正则表达式来解决它。

String str = beforeModify.get(i);
if (str.matches("[aeiouáéíěyýůú]") {
    // do whatever you wanna do
}   

也不必反复调用beforeModify.get(i),因为它可能产生相同的结果。