Как проверить, состоит ли строка из заглавных букв в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь проверять, является ли строка в Java написанной в верхнем регистре. Мы рассмотрим различные методы для достижения этого, начиная с сравнения исходной строки с ее версией в верхнем регистре с использованием метода toUpperCase().

Затем вы узнаете, как пройти по каждому символу в строке и использовать метод Character.isUpperCase() для проверки регистра отдельных символов. Наконец, мы рассмотрим, как обрабатывать небуквенные символы в строке при выполнении этих проверок.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) 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".

Сначала создадим новый Java-файл с именем StringCompare.java в директории ~/project. Для этого можно кликнуть правой кнопкой мыши в проводнике файлов слева и выбрать "New File", а затем ввести 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, str1 и str2, с разным регистром букв.
  • str1.equals(str2) выполняет сравнение с учетом регистра. Он вернет true только в том случае, если строки полностью совпадают, включая регистр букв.
  • str1.toUpperCase() преобразует str1 в строку, состоящую только из заглавных букв ("HELLO").
  • str2.toUpperCase() преобразует str2 в строку, состоящую только из заглавных букв ("HELLO").
  • Затем мы используем метод .equals() для сравнения строк в верхнем регистре, тем самым выполняя сравнение без учета регистра.

Сохраните файл, нажав Ctrl + S (или Cmd + S на Mac).

Теперь скомпилируем и запустим эту программу в терминале. Убедитесь, что вы находитесь в директории ~/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 и целочисленную переменную uppercaseCount, инициализированную значением 0.
  • Мы используем цикл for для перебора каждого символа в строке text. Цикл выполняется от индекса 0 до (но не включая) длины строки.
  • text.charAt(i) возвращает символ по текущему индексу i в строке.
  • Character.isUpperCase(character) проверяет, является ли символ заглавной буквой. Этот метод возвращает true, если символ является заглавной буквой, и false в противном случае.
  • Если isUpperCase() возвращает true, мы выводим сообщение, указывающее на заглавный символ и его индекс, и увеличиваем значение uppercaseCount.

Сохраните файл (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() в цикле для проверки, является ли каждый символ заглавной буквой. Мы также рассмотрели, как обрабатывать небуквенные символы в этом процессе, чтобы обеспечить надежность нашей проверки. Эти методы предоставляют различные подходы для определения, состоит ли строка из заглавных букв, в зависимости от конкретных требований задачи.