EqualsIgnoreCase() not working as intended.

家住魔仙堡 提交于 2021-02-20 06:44:22

问题


When i run the following program it prints only

equals says they are equal

However From equalsIgnoreCase docs in java 8 we have :

Two characters c1 and c2 are considered the same ignoring case if at least one of the following is true:
• Applying the method java.lang.Character.toUpperCase(char) to each character produces the same result

    public class Test {
    public static void main(String[] args) {

        String string1 = "abc\u00DF";
        String string2 = string1.toUpperCase();

        if (string1.equalsIgnoreCase(string2))
            System.out.println("equalsIgnoreCase says they are equal");

        if (string1.toUpperCase().equals(string2.toUpperCase()))
            System.out.println("equals says they are equal");

    }
}

So my question is why this program is not printing

equalsIgnoreCase says they are equal

As in both operations upper case charcters are used.


回答1:


You are using/comparing the german ß sign, its uppercase produce SS... so you need to use the Locale.German

if (string1.toUpperCase(Locale.GERMAN).equals(string2.toUpperCase(Locale.GERMAN)))

that will return true....




回答2:


Yes, its correct.

if (string1.equalsIgnoreCase(string2)) ....

ignores the lower and uppercase of string1 and string2.

if (string1.equals(string2)) ....

will detect, that there are different letters and does not print ..they are equal. Your second example with the uppercase conversion is OK too.



来源:https://stackoverflow.com/questions/44238749/equalsignorecase-not-working-as-intended

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!