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



