Stworzyłem program w Javie, aby porównać dwa ciągi:
String s1 = "Hello";
String s2 = "hello";
if (s1.equals(s2)) {
System.out.println("hai");
} else {
System.out.println("welcome");
}
Wyświetla „powitanie”. Rozumiem, że wielkość liter ma znaczenie. Ale moim problemem jest to, że chcę porównać dwa ciągi bez rozróżniania wielkości liter. To znaczy oczekuję, że wyjście będzie hai
.
s1.equalsIgnoreCase(s2)
możesz nie zrobić tego wszędzie, gdzie trzeba. Sugeruję, aby znaleźć, skąd pochodzi ciąg - plik, baza danych lub dane wejściowe użytkownika - i przekonwertować je na wielkie (lub małe litery) i nadal używać .equals do porównania.
equalsIgnoreCase
podejścia. Przeczytaj o tureckim problemie I i podobnych problemach z Unicode dla uzasadnienia.
equalsIgnoreCase
zwraca nieprawidłową wartość dla tureckiego, ponieważ zwraca prawdę przy porównywaniu „i” i „I”, nawet jeśli powinien zwracać fałsz. Więc podejrzewam, że jeśli chcesz wziąć pod uwagę lokalizacje, Collator
tak naprawdę jest to najlepszy sposób.
toLowerCase
/ toUpperCase
na całym ciągu i zrobienie tego dla każdego znaku daje również dwa różne wyniki.