计算元音和辅音

Count Vowels and Consonants

我正在探索这段代码,它给出了元音和辅音的计数,但不理解这一行代码 else if (ch >= 'a' && ch <= 'z')。请告诉我背后的逻辑是什么

import java.util.Scanner;

public class Vowels {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter string");
        String str = sc.nextLine();
        int vowl = 0;
        int conso = 0;

        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
                vowl++;
            } else if (ch >= 'a' && ch <= 'z') {
                conso++;
            }
        }
        System.out.println(vowl);
        System.out.println(conso);
    }
}

字符的一个好处是您可以像处理整数一样处理它们。

例如,你也可以这样做'a' + 3 = 'd'

意思是'a' < 'd' = true.

如您从 Java: Character comparison.

中所见,以这种方式比较字符会造成混淆

基本上 @TDG 是正确的,ch 被检查为在 'a' 和 'z' 之间,因此该检查可能被翻译为“is ch a lower case character?”

棘手的部分是,人们使用的语言不同,期望可能会有所不同,尤其是因为未考虑语言特定字符。在德语中,'ö' 肯定符合小写字符的条件,但不在检查范围内。通过研究 Unicode code charts.

可以明显看出复杂性

最好的检查是使用Character.isLowerCase()

char是一个用数字表示的字符,它是ASCII/unicodetable中字符的索引,因为字母字符在[中是按顺序排列的=12=] table,下面的代码检查 ch 是否在 [=24= 中的 97122 的小写字母字符表示范围内].

使用(int) ch你可以看到字符的十进制值并且可以将它与ASCII中的索引进行比较table.

您可以在此处查看 ASCII table:https://www.asciitable.com/

  • 注意 if 语句捕获所有元音

  • 什么都不是元音,要么是大写字母,要么是数字,要么是特殊字符,要么是辅音

    else if (ch >= 'a' && ch <= 'z')
    这将检查它是否不是元音是否至少落在小写字母 'a'-'z' 的范围内并且不是特殊字符或数字。(我们知道它不是元音但它在ascii 范围 26=a -51=z)

参考ASCII table了解范围比较