我正在研究一个项目,其中一条评论是我的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";
答案 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----
}