如何在 Java 中检查字符串是否全为大写

JavaJavaBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何在 Java 中检查一个字符串是否全部为大写。我们将探索不同的实现方法,首先是使用 toUpperCase() 方法将原始字符串与其大写版本进行比较。

接下来,你将学习如何遍历字符串,并使用 Character.isUpperCase() 方法检查每个字符的大小写。最后,我们将讨论在执行这些检查时如何处理字符串中的非字母字符。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/operators("Operators") java/BasicSyntaxGroup -.-> java/if_else("If...Else") java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/SystemandDataProcessingGroup -.-> java/string_methods("String Methods") subgraph Lab Skills java/operators -.-> lab-559987{{"如何在 Java 中检查字符串是否全为大写"}} java/if_else -.-> lab-559987{{"如何在 Java 中检查字符串是否全为大写"}} java/for_loop -.-> lab-559987{{"如何在 Java 中检查字符串是否全为大写"}} java/strings -.-> lab-559987{{"如何在 Java 中检查字符串是否全为大写"}} java/string_methods -.-> lab-559987{{"如何在 Java 中检查字符串是否全为大写"}} end

使用 toUpperCase() 方法比较字符串

在这一步中,你将学习如何在 Java 中比较字符串,尤其关注如何进行不区分大小写的比较。这是编程中的常见任务,例如,检查用户输入的是 "yes"、"Yes" 还是 "YES"。

首先,在你的 ~/project 目录下创建一个名为 StringCompare.java 的新 Java 文件。你可以通过在左侧的文件资源管理器中右键单击,选择「新建文件」,然后输入 StringCompare.java 来完成此操作。

现在,在编辑器中打开 StringCompare.java 文件,并添加以下代码:

public class StringCompare {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "hello";

        // Case-sensitive comparison
        boolean areEqualCaseSensitive = str1.equals(str2);
        System.out.println("Case-sensitive comparison: " + areEqualCaseSensitive);

        // Case-insensitive comparison using toUpperCase()
        boolean areEqualCaseInsensitive = str1.toUpperCase().equals(str2.toUpperCase());
        System.out.println("Case-insensitive comparison using toUpperCase(): " + areEqualCaseInsensitive);
    }
}

下面来详细分析这段代码:

  • 我们声明了两个 String 类型的变量 str1str2,它们的大小写不同。
  • str1.equals(str2) 进行区分大小写的比较。只有当两个字符串完全相同时(包括字母的大小写),它才会返回 true
  • str1.toUpperCase()str1 转换为全大写字母("HELLO")。
  • str2.toUpperCase()str2 转换为全大写字母("HELLO")。
  • 然后,我们使用 .equals() 方法比较这两个字符串的大写版本,从而实现不区分大小写的比较。

按下 Ctrl + S(在 Mac 上是 Cmd + S)保存文件。

现在,让我们在终端中编译并运行这个程序。确保你处于 ~/project 目录下。

编译代码:

javac StringCompare.java

如果没有错误,将会生成一个 StringCompare.class 文件。

现在,运行编译后的代码:

java StringCompare

你应该会看到以下输出:

Case-sensitive comparison: false
Case-insensitive comparison using toUpperCase(): true

这个输出表明,区分大小写的比较(equals())返回 false,因为 "Hello" 和 "hello" 由于大小写不同而不同;而使用 toUpperCase() 进行的不区分大小写的比较返回 true,因为两个字符串在转换为大写后都变成了 "HELLO"。

在比较字符串之前使用 toUpperCase()(或 toLowerCase())是 Java 中进行不区分大小写比较的常用方法。

在循环中使用 Character.isUpperCase()

在上一步中,你学习了如何不区分大小写地比较整个字符串。现在,让我们来探讨如何检查字符串中的单个字符,并判断它们是否为大写字母。当你需要分析字符串的结构,例如统计大写字母的数量或验证输入格式时,这非常有用。

Java 提供了 Character 类,它包含一些处理单个字符的实用方法。其中一个方法是 isUpperCase(),用于检查给定字符是否为大写字母。

让我们修改 StringCompare.java 文件来演示这一点。在编辑器中打开 ~/project/StringCompare.java,并将其内容替换为以下代码:

public class StringCompare {
    public static void main(String[] args) {
        String text = "Hello World";
        int uppercaseCount = 0;

        System.out.println("Analyzing the string: \"" + text + "\"");

        // Loop through each character in the string
        for (int i = 0; i < text.length(); i++) {
            char character = text.charAt(i); // Get the character at the current index

            // Check if the character is uppercase
            if (Character.isUpperCase(character)) {
                System.out.println("Found an uppercase character: " + character + " at index " + i);
                uppercaseCount++; // Increment the counter
            }
        }

        System.out.println("Total uppercase characters found: " + uppercaseCount);
    }
}

下面来理解这段代码的新增部分:

  • 我们声明了一个 String 类型的变量 text 和一个初始值为 0 的整数变量 uppercaseCount
  • 我们使用 for 循环遍历 text 字符串中的每个字符。循环从索引 0 开始,直到字符串的长度(但不包括该长度)。
  • text.charAt(i) 获取字符串中当前索引 i 处的字符。
  • Character.isUpperCase(character) 检查该字符是否为大写字母。如果字符是大写字母,该方法返回 true,否则返回 false
  • 如果 isUpperCase() 返回 true,我们打印一条消息,指出该大写字符及其索引,并将 uppercaseCount 加 1。

保存文件(Ctrl + S)。

现在,在 ~/project 目录下的终端中编译并运行修改后的程序:

编译:

javac StringCompare.java

运行:

java StringCompare

你应该会看到类似以下的输出:

Analyzing the string: "Hello World"
Found an uppercase character: H at index 0
Found an uppercase character: W at index 6
Total uppercase characters found: 2

这个输出表明,我们的程序正确识别了字符串中的大写字符 'H' 和 'W' 并进行了计数。

在循环中使用 Character.isUpperCase() 是逐字符分析字符串的强大技术。下一步,我们将考虑如何处理非字母字符。

处理非字母字符

在上一步中,你使用 Character.isUpperCase() 方法来识别大写字母。然而,字符串不仅仅包含字母,还可能包含数字、符号、空格和标点。在分析字符串时,通常需要区分不同类型的字符。

Character 类为此提供了其他有用的方法,例如:

  • Character.isLetter(char ch):检查一个字符是否为字母。
  • Character.isDigit(char ch):检查一个字符是否为数字(0 - 9)。
  • Character.isWhitespace(char ch):检查一个字符是否为空白字符(如空格、制表符、换行符)。

让我们再次修改 StringCompare.java 文件,以演示如何处理非字母字符并统计字符串中不同类型字符的数量。在编辑器中打开 ~/project/StringCompare.java,并将其内容替换为以下代码:

public class StringCompare {
    public static void main(String[] args) {
        String text = "Hello World 123!";
        int letterCount = 0;
        int digitCount = 0;
        int whitespaceCount = 0;
        int otherCount = 0;

        System.out.println("Analyzing the string: \"" + text + "\"");

        // Loop through each character in the string
        for (int i = 0; i < text.length(); i++) {
            char character = text.charAt(i); // Get the character at the current index

            // Check the type of the character
            if (Character.isLetter(character)) {
                letterCount++;
            } else if (Character.isDigit(character)) {
                digitCount++;
            } else if (Character.isWhitespace(character)) {
                whitespaceCount++;
            } else {
                otherCount++; // Characters that are not letters, digits, or whitespace
            }
        }

        System.out.println("Total characters: " + text.length());
        System.out.println("Letter count: " + letterCount);
        System.out.println("Digit count: " + digitCount);
        System.out.println("Whitespace count: " + whitespaceCount);
        System.out.println("Other character count: " + otherCount);
    }
}

在这段更新后的代码中:

  • 我们初始化了用于统计字母、数字、空白字符和其他字符的计数器。
  • 在循环内部,我们使用 if-else if-else 语句,通过 Character.isLetter()Character.isDigit()Character.isWhitespace() 方法来检查每个字符的类型。
  • 根据字符类型,我们增加相应的计数器。
  • 最后,我们打印出每种类型字符的统计数量。

保存文件(Ctrl + S)。

现在,在 ~/project 目录下的终端中编译并运行该程序:

编译:

javac StringCompare.java

运行:

java StringCompare

你应该会看到类似以下的输出:

Analyzing the string: "Hello World 123!"
Total characters: 16
Letter count: 10
Digit count: 3
Whitespace count: 2
Other character count: 1

这个输出正确地识别并统计了字符串 "Hello World 123!" 中不同类型的字符。字母有 'H'、'e'、'l'、'l'、'o'、'W'、'o'、'r'、'l'、'd'(共 10 个)。数字有 '1'、'2'、'3'(共 3 个)。空白字符是 "Hello" 和 "World" 之间的空格,以及 "World" 和 "123" 之间的空格(共 2 个)。其他字符是 '!'(共 1 个)。总数为 10 + 3 + 2 + 1 = 16,与字符串的长度相符。

通过使用 Character.isLetter()Character.isDigit()Character.isWhitespace() 等方法,你可以编写更健壮的代码,以处理字符串中各种类型的字符。这对于数据验证、解析输入或分析文本等任务至关重要。

总结

在本次实验中,你学习了如何在 Java 中检查字符串是否全为大写字母。你探索了两种主要方法。首先,你使用 toUpperCase() 方法将字符串转换为大写形式,并使用 equals() 方法进行不区分大小写的比较。这种方法适用于检查两个字符串是否相同,而不考虑它们的大小写。

其次,你学习了如何遍历字符串,并在循环中使用 Character.isUpperCase() 方法来检查每个字符是否为大写字母。你还考虑了在这个过程中如何处理非字母字符,以确保检查的健壮性。这些技术根据任务的具体要求,为确定字符串的大写状态提供了不同的方法。