循环char数组和计数字符

时间:2014-10-11 10:59:49

标签: java loops arrays

我正在尝试优化我的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);

    }
}

5 个答案:

答案 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]+", ""));