Search code examples
javaarraysstringasciicompareto

How can I sort a string with integers in Java?


I have got an array. Each space in my array holds two strings (one string contains just letters, the other one numbers).

What I am trying to do now is to sort the array either alphabetically or numerically (depending on which space in the array is chosen). To do that, I am using the compareTo() method. However, I found that when I try to sort the array according to the numbers, it actually does not really work.

My guess is, that since Java handles strings with the ascii codes, numbers don't show up in numerical order.

Question: How can I fix that?


Solution

  • In your compareTo() method, when you detect that you are looking at two strings representing integers, make sure they are the same length before comparing them. If one string is shorter, prepend leading zeros to it until the strings are of equal length.

    For example, 32 and 123 used to not compare correctly with the default algorithm: 3 is greater, so 32 compares as being after 132. However, once you prepend zero, the comparison works again: 032 is less than 123.