Я створив програму Java для порівняння двох рядків:
String s1 = "Hello";
String s2 = "hello";
if (s1.equals(s2)) {
System.out.println("hai");
} else {
System.out.println("welcome");
}
На ньому відображається "привітання". Я розумію, що це враховує регістри. Але моя проблема полягає в тому, що я хочу порівняти два рядки без чутливості до регістру. Тобто я очікую, що результат буде hai
.
s1.equalsIgnoreCase(s2)
ви можете зробити це не скрізь, коли це потрібно зробити. Я пропоную вам знайти, звідки походить рядок - файл, базу даних чи введення користувача, - і перетворити їх у верхній (або нижній регістр) та продовжувати використовувати .equals для порівняння.
equalsIgnoreCase
підхід. Прочитайте про турецьку проблему I та подібні проблеми Unicode для обґрунтування.
equalsIgnoreCase
повертає неправильне значення для турецької мови, оскільки воно повертає істинне для порівняння "i" та "I", хоча воно повинно повертати помилкове. Тож я підозрюю, що якщо ви хочете взяти до уваги локалі, Collator
то насправді це шлях.
toLowerCase
/ toUpperCase
в цілому рядку і виконання цього символу дають два різні результати.