用for循环替换if语句(Java)

时间:2014-02-26 21:44:49

标签: java string methods

我正在研究一个项目,其中一条评论是我的if语句太长了。我同意这一点,但我仍然困惑如何用建议的for循环替换它。它一直让我发疯。该项目是用句子分析辅音并报告它们是否在其中。这是我使用的代码。该项目已被标记,因此这更像是“我的错误在哪里/哪里可以改进问题”。

if ((userInput.contains("b"))||(userInput.contains("c"))||(userInput.contains("d"))||
    (userInput.contains("f"))||(userInput.contains("g"))||(userInput.contains("h"))||
    (userInput.contains("j"))||(userInput.contains("k"))||(userInput.contains("l"))||
    (userInput.contains("m"))||(userInput.contains("n"))||(userInput.contains("p"))||
    (userInput.contains("q"))||(userInput.contains("r"))||(userInput.contains("s"))||
    (userInput.contains("t"))||(userInput.contains("v"))||(userInput.contains("w"))||
    (userInput.contains("x"))||(userInput.contains("y"))||(userInput.contains("z")))
        //checking for consonants
        results += "The input contains consonants";
else 
    results += "The input contains no consonants";

10 个答案:

答案 0 :(得分:5)

你可以创建一个辅音数组(可能作为你的类的静态常量),并使用一个函数来完成这项工作,类似于(伪代码)

boolean hasConsonants(String userInput) {
    for (String consonant : consonants)
        if (userInput.contains(consonant)
            return true;
    return false;
}

然后你可以简单地调用

if (hasConsonants(userInput))
    results += "The input contains consonants";
else
    results += "The input contains no consonants";

P.S。最好让您的consonants数组成为char[],并在每个循环的中使用char代替String

答案 1 :(得分:2)

要使用for循环,您可以执行以下操作:

for (char c = 'b'; c <= 'z'; c++) {
    if (c == 'e' || c == 'i' || c == 'o' || c == 'u')
        continue;
    if (userInput.contains(String.valueOf(c))) {
        return "The input contains consonants";
    }
}
return "The input contains no consonants";

答案 2 :(得分:1)

为什么不这样做:

private String[] mCharacters = new String[] { "a", "b", "c" };

public boolean hasSelectedCharacters(String str) {
    for (final String c : mCharacters) {
        if (str.contains(c)) {
            return true;
        }
    }
    return false;
}

如果输入字符串包含任何列出的字符串,则返回true,否则返回false。与您的long if相同,但更具可读性。

答案 3 :(得分:1)

boolean containsConsonant = 
    Pattern.compile("[bcdfghjklmnpqrstvwxyz]").matcher(userInput).find();

答案 4 :(得分:1)

好的,是时候学习正则表达式或RegEx了。所以你的if语句将是:

if (userInput.matches(".*[bcdfghjklmnpqrstvwxyz].*"))
   results += "The input contains consonants";
else 
   results += "The input contains no consonants";

有关详细信息,请参阅本教程Java Regex - Tutorial

答案 5 :(得分:0)

为什么不能这样:

if(java.util.regex.Pattern.compile("(?i)[b-df-hj-np-tv-z]").matcher(line).find())
    System.out.println("Contains consonants");

答案 6 :(得分:0)

char[] consonants = "bcdfghkjlmnpqrstvwxyz".toCharArray();
results = "The input contains no consonants";

for (int i = 0; i < consonants.length; i++)
    if (userinput.contains(String.valueOf(consonants[i])))
        results = "The input contains consonants";

答案 7 :(得分:0)

以下是我将其作为循环编写的方法(我假设你的字符串已经是小写的):

public static boolean containsConsonants(String s) {
    for (char c : "bcdfghjklmnpqrstvwxyz".toCharArray())
        if (s.indexOf(c) >= 0) return true;
    return false;
}

这是另一种方式,使用正则表达式:

private static final Pattern consonantPattern =
    Pattern.compile("[a-z&&[^aeiou]]");
public static boolean containsConsonants(String s) {
    return consonantPattern.matcher(s).find();
}

答案 8 :(得分:-1)

使用正则表达式,例如:

if (userInput.matches (".*[bcdfghjklmnpqrstvwx]+.*"))
    results += "has consonants";
else
    results += "no consonants";

如果您可以确保不使用任何符号,那么更简单的版本将是:

if (!userInput.matches (".*[aeiou]+.*"))
    results += "has consonants";
else
    results += "no consonants";

调整以适应区分大小写。

答案 9 :(得分:-1)

更高效,更易读

if(Pattern.matches("[b-df-hj-np-tv-z]+",userInput)){  
    ----code----
}
else{
    ----other code----  
}