我正在尝试优化我的Java代码,所以我尝试了一些东西。在我寻找一个简短的方法时,我在下面制作了代码。这会引发Exception
。你能告诉我为什么吗?我不能通过char数组循环一个字符串吗?
public class Input {
public static void main(String[] args) {
String check = "Dit moet toch gewoon te doen zijn !!";
check = check.toLowerCase();
int[] counter = {0, 0, 0, 0, 0};
char[] vowel = {'a', 'e', 'i', 'o', 'u'};
int total = 0;
for (int i = 0; i < check.length(); i++)
if (check.charAt(i) == vowel[i])
counter[i]++;
for (int t : counter)
total += t;
System.out.println("Aantal klinkers: \t" + total);
}
}
答案 0 :(得分:3)
您的代码如下所示: 对于&#34;中的每个角色,检查&#34; 如果字符在&#34;中检查&#34;是&#34;元音&#34;
中索引的字符这可能不是你想要的。您获得的例外是因为&#34;元音&#34;中只有5个字符。但是很多都在&#34;检查&#34; (我不算)
现在,我假设你想要做的事实上是计算每个元音的数量&#34;检查&#34;
在这种情况下,您实际上应该使用嵌套的for循环。
for (int i = 0; i < check.length(); i++) {
for (int v = 0; v < vowel.length; v++) {
if (check.charAt(i) == vowel[v]) {
counter[v]++;
break;
}
}
}
答案 1 :(得分:2)
for (int i = 0; i < check.length(); i++)
if (check.charAt(i) == vowel[i])
counter[i]++;
此循环从0
转到check.length()
;但你的数组vowel[]
有5个元素。因此它生成数组超出范围的异常。
答案 2 :(得分:0)
你必须有两个循环 一个用于遍历字符串中的每个char,一个for循环遍历每个元音数组,如此
for (int i = 0; i < check.length(); i++)
for (int p = 0; p < vowel.length; p++)
if (check.charAt(i) == vowel[p])
counter[p]++;
享受。
答案 3 :(得分:0)
您可以使用正则表达式执行此操作:
Pattern vowels = Pattern.compile("(?i)[aeiou]");
String check = "Dit moet toch gewoon te doen zijn !!";
Matcher matcher = vowels.matcher(check);
while(matcher.find()) {
System.out.println("found vowel: " + matcher.group());
}
正则表达式的解释:
(?i)
使模式不区分大小写,[aeiou]
个字符匹配。
答案 4 :(得分:0)
聪明的正则表达式部门还有一个,所以你不必让你的字符串小写并丢失元音的情况:
if (check.matches("(?i)[^a-z][a-z].*"))
System.out.println("Vowels found: " + check.replaceAll("[^a-z]+", ""));