Использование метода equalsIgnoreCase()
для регистронезависимого сравнения
На этом последнем этапе мы узнаем о методе equalsIgnoreCase()
, который используется для сравнения строк без учета регистра символов. Это очень полезно, когда вам нужно проверить, совпадают ли две строки, независимо от того, являются ли буквы заглавными или строчными.
Метод equals()
, который мы использовали на предыдущих этапах, выполняет регистрозависимое сравнение. Это означает, что "hello" не равно "Hello" при использовании equals()
. Метод equalsIgnoreCase()
игнорирует регистр, поэтому "hello" и "Hello" будут считаться равными.
Давайте модифицируем нашу программу в последний раз, чтобы продемонстрировать использование equalsIgnoreCase()
.
-
Откройте файл StringComparison.java
в редакторе WebIDE.
-
Добавьте несколько новых переменных строк с разным регистром и используйте equalsIgnoreCase()
для их сравнения:
public class StringComparison {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = null;
String str5 = "Hello"; // Different casing
String str6 = "HELLO"; // All uppercase
System.out.println("Comparing str1 and str2 using equals(): " + str1.equals(str2));
System.out.println("Comparing str1 and str3 using equals(): " + str1.equals(str3));
System.out.println("Comparing str1 and str2 using ==: " + (str1 == str2));
System.out.println("Comparing str1 and str3 using ==: " + (str1 == str3));
// Safe comparison with null
System.out.println("Comparing str1 and str4 safely: " + (str1 != null && str1.equals(str4)));
System.out.println("Comparing str4 and str1 safely: " + (str4 != null && str4.equals(str1)));
System.out.println("Comparing str4 and null safely: " + (str4 == null));
System.out.println("\n--- Case-Insensitive Comparisons ---");
System.out.println("Comparing str1 and str5 using equals(): " + str1.equals(str5));
System.out.println("Comparing str1 and str5 using equalsIgnoreCase(): " + str1.equalsIgnoreCase(str5));
System.out.println("Comparing str1 and str6 using equalsIgnoreCase(): " + str1.equalsIgnoreCase(str6));
System.out.println("Comparing str5 and str6 using equalsIgnoreCase(): " + str5.equalsIgnoreCase(str6));
// equalsIgnoreCase() also handles null safely if called on a non-null string
System.out.println("Comparing str1 and str4 using equalsIgnoreCase(): " + str1.equalsIgnoreCase(str4));
// System.out.println("Comparing str4 and str1 using equalsIgnoreCase(): " + str4.equalsIgnoreCase(str1)); // This would still cause a NullPointerException
}
}
В обновленном коде:
- Мы добавили
str5
и str6
с разным регистром.
- Мы добавили новые инструкции вывода, чтобы продемонстрировать разницу между
equals()
и equalsIgnoreCase()
.
- Мы также показываем, что вызов
equalsIgnoreCase()
для не-null
строки с аргументом null
не вызывает ошибки, как и в случае с equals()
. Однако вызов equalsIgnoreCase()
для null
переменной строки по-прежнему приведет к NullPointerException
.
-
Сохраните файл (Ctrl+S или Cmd+S).
-
Скомпилируйте программу в терминале:
javac StringComparison.java
-
Запустите скомпилированную программу:
java StringComparison
Вы должны увидеть вывод, похожий на следующий:
Comparing str1 and str2 using equals(): true
Comparing str1 and str3 using equals(): true
Comparing str1 and str2 using ==: true
Comparing str1 and str3 using ==: false
Comparing str1 and str4 safely: false
Comparing str4 and str1 safely: false
Comparing str4 and null safely: true
--- Case-Insensitive Comparisons ---
Comparing str1 and str5 using equals(): false
Comparing str1 and str5 using equalsIgnoreCase(): true
Comparing str1 and str6 using equalsIgnoreCase(): true
Comparing str5 and str6 using equalsIgnoreCase(): true
Comparing str1 and str4 using equalsIgnoreCase(): false
Вывод четко показывает, что equalsIgnoreCase()
возвращает true
при сравнении строк с одинаковыми символами, но разным регистром, в то время как equals()
возвращает false
.
Теперь вы узнали, как сравнивать строки на Java с использованием equals()
для регистрозависимого сравнения, как безопасно обрабатывать null
-строки и как использовать equalsIgnoreCase()
для регистронезависимого сравнения. Это важные навыки для работы со строками на Java.