Pages

Friday, February 22, 2019

Java String compareToIgnoreCase​ method example - Internal Implementation

String compareToIgnoreCase​ method in java with example:

compareToIgnoreCase​() method compares two strings lexicographically by comparing the each character in both strings and ignoring case differences. 

This method returns an integer whose sign is that of calling compareTo with normalized versions of the strings where case differences have been eliminated by calling Character.toLowerCase(Character.toUpperCase(character)) on each character. 



String compareToIgnoreCase​()


Syntax:

Here is the syntax of this method.


public int compareToIgnoreCase​(String str)


Return type: int

A negative integer, zero, or a positive integer as the specified String is greater than, equal to, or less than this String, ignoring case considerations.


Recommended to learn how String compareTo() method compare two strings lexicographically.


As we know compareTo() method does the same thing, however there is a difference between these two methods. Unlike compareTo() method, the compareToIgnoreCase() method ignores the case (uppercase or lowercase) while comparing strings.



Java String compareToIgnoreCase() example 1:


Let us write a example program to see what will be the output for these two methods for same strings with lowercase and uppercase.



package examples.java.w3schools.string;

public class StringcompareToIgnoreCaseExample1 {
 public static void main(String[] args) {
  String str1 = "java-w3schools";
  String str2 = "JAVA-W3SCHOOLS";
  System.out.println("compareTo Demo: str1.compareTo(str2) : "+str1.compareTo(str2));
  System.out.println("compareToIgnoreCase Demo: str1.compareToIgnoreCase(str2) : "+str1.compareToIgnoreCase(str2));
 }
}


Java String compareToIgnoreCase() example 1


Similar to compareTo() method, the compareToIgnoreCase() method compares the strings based on the Unicode value of their each character. It returns 0 when the strings are equal otherwise it returns positive or negative value. Please refer the following output.

Output:



compareTo Demo: str1.compareTo(str2) : 32
compareToIgnoreCase Demo: str1.compareToIgnoreCase(str2) : 0


Java String compareToIgnoreCase() example 2:


In this example, taking 3 strings named str1, str2, str3 with same content. Only change in case levels.


str1 in lower case

str1 in Upper case
str1 in both lower and upper case

Here comparing all possible cases with these 3 strings.



package examples.java.w3schools.string;

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

  String str1 = "world"; // lower case
  String str2 = "WORLD"; // Upper cas
  String str3 = "WorlD"; // Both upper and lower cases

  System.out.println("Comparing str1 and str2: " + str1.compareToIgnoreCase(str2));
  System.out.println("Comparing str2 and str3: " + str2.compareToIgnoreCase(str3));
  System.out.println("Comparing str3 and str1: " + str3.compareToIgnoreCase(str1));

  // All these three Comparisions will be treated as values are equal. Because this method ignores the case types. 
 }
}


When we run the program, we will get the output ZERO means contents are same.


Java String compareToIgnoreCase() example 2


Output:



Comparing str1 and str2: 0
Comparing str2 and str3: 0
Comparing str3 and str1: 0


Java String compareToIgnoreCase() example 3:


what if there are two different strings with different case?


Taking two Strings "Onee" and "One". The first string has extra character 'e'. So, by looking at string we can tell that these are not same. So, compareToIgnoreCase() and compareTo() both methods returns same output.




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

  String value1 = "Onee"; // String 1
  String value2 = "One"; // String 2

  System.out.println("Comparing value1 and value2 using  compareToIgnoreCase(): " + value1.compareToIgnoreCase(value2));
  System.out.println("Comparing value1 and value2 using compareTo(): " + value1.compareTo(value2));
 }
}




Java String compareToIgnoreCase() example 3


Output:

Comparing value1 and value2 using  compareToIgnoreCase(): 1
Comparing value1 and value2 using compareTo(): 1



Observe the output is same for both methods. First checks length of both strings are same. If same then will check char by char. If not then will return the difference of string 1 length and string 2 length.



String compareToIgnoreCase​() method Internal Implementation:

The below code is from String class compareToIgnoreCase() method and calls compare method of comparator CASE_INSENSITIVE_ORDER.


 public int compareToIgnoreCase(String str) {
        return CASE_INSENSITIVE_ORDER.compare(this, str);
    }



compareToIgnoreCase​() method has its own Comparator implementation for ignoring case differences.



    public static final Comparator CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator();


Code of compare method:



 public int compare(String s1, String s2) 
 {
            byte v1[] = s1.value;
            byte v2[] = s2.value;
            if (s1.coder() == s2.coder()) {
                return s1.isLatin1() ? StringLatin1.compareToCI(v1, v2)
                                     : StringUTF16.compareToCI(v1, v2);
            }
            return s1.isLatin1() ? StringLatin1.compareToCI_UTF16(v1, v2)
                                 : StringUTF16.compareToCI_Latin1(v1, v2);
    }



Steps:


1) It takes first character from both strings.
2) Convert into upper case both characters.
3) Comparing both are same.
4) If not same, then convert into lower case.
5) Compare again lower case characters
6) If same then continue with next character in both strings till last character.
7) If not same then return diff of both characters ASCII Code.
8) If all characters are same in both strings then returns diff of both strings length.

No comments:

Post a Comment

Please do not add any spam links in the comments section.