String Comparison in Java

String Comparison in Java

Leading from answers from @Bozho and @aioobe, lexicographic comparisons are similar to the ordering that one might find in a dictionary.

The Java String class provides the .compareTo () method in order to lexicographically compare Strings. It is used like this apple.compareTo (banana).

The return of this method is an int which can be interpreted as follows:

  • returns < 0 then the String calling the method is lexicographically first (comes first in a dictionary)
  • returns == 0 then the two strings are lexicographically equivalent
  • returns > 0 then the parameter passed to the compareTo method is lexicographically first.

More specifically, the method provides the first non-zero difference in ASCII values.

Thus computer.compareTo (comparison) will return a value of (int) u - (int) a (20). Since this is a positive result, the parameter (comparison) is lexicographically first.

There is also a variant .compareToIgnoreCase () which will return 0 for a.compareToIgnoreCase (A); for example.

The wording comparison is mildly misleading. You are not comparing for strict equality but for which string comes first in the dictionary (lexicon).

This is the feature that allows collections of strings to be sortable.

Note that this is very dependent on the active locale. For instance, here in Denmark we have a character å which used to be spelled as aa and is very distinct from two single as (EDIT: If pronounced as å!). Hence Danish sorting rules treat two consequtive as identically to an å, which means that it goes after z. This also means that Danish dictionaries are sorted differently than English or Swedish ones.

String Comparison in Java

The String.compareTo(..) method performs lexicographical comparison. Lexicographically == alphebetically.

Leave a Reply

Your email address will not be published. Required fields are marked *