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.
equalsIgnoreCasepodejścia. Przeczytaj o tureckim problemie I i podobnych problemach z Unicode dla uzasadnienia.
equalsIgnoreCasezwraca 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, Collatortak naprawdę jest to najlepszy sposób.
toLowerCase/ toUpperCasena całym ciągu i zrobienie tego dla każdego znaku daje również dwa różne wyniki.