I just announced the new Spring Boot 2 material, coming in REST With Spring:

>> CHECK OUT THE COURSE

1. Overview

In this tutorial, we’ll show how to sort String alphabetically.

There might be plenty of reason why we’d like to do it – one of them could be validation if two words are composed of the same characters set. That way, we’ll verify if they’re an anagram.

2. Sorting a String

Internally, String uses an array of characters to operate on. Therefore, we can make use of the toCharArray() : char[] method, sort the array and create a new String based on the result:

@Test
void givenString_whenSort_thenSorted() {
    String abcd = "bdca";
    char[] chars = abcd.toCharArray();

    Arrays.sort(chars);
    String sorted = new String(chars);

    assertThat(sorted).isEqualTo("abcd");
}

In Java 8, we can leverage the Stream API to sort the String for us:

@Test
void givenString_whenSortJava8_thenSorted() {
    String sorted = "bdca".chars()
      .sorted()
      .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
      .toString();

    assertThat(sorted).isEqualTo("abcd");
}

Here, we’re using the same algorithm as the first example, but sorting the char array using the Stream sorted() method.

Notice, that characters are sorted by its ASCII codes, therefore, capital letters will always occur at the beginning. So, if we’d like to sort “abC” the result of sorting will be “Cab”.

To solve it, we need to transform the string with toLowerCase() method. We’re going to do that in our Anagram validator example.

3. Testing

To test sorting, we’ll build the anagram validator. As mentioned an anagram occurs when two different words or sentences are compound of the same set of characters.

Let’s have a look at our AnagramValidator class:

public class AnagramValidator {

    public static boolean isValid(String text, String anagram) {
        text = prepare(text);
        anagram = prepare(anagram);

        String sortedText = sort(text);
        String sortedAnagram = sort(anagram);

        return sortedText.equals(sortedAnagram);
    }

    private static String sort(String text) {
        char[] chars = prepare(text).toCharArray();

        Arrays.sort(chars);
        return new String(chars);
    }

    private static String prepare(String text) {
        return text.toLowerCase()
          .trim()
          .replaceAll("\\s+", "");
    }
}

Now, we’re going to make use of our sorting method and verify whether the anagram is valid:

@Test
void givenValidAnagrams_whenSorted_thenEqual() {
    boolean isValidAnagram = AnagramValidator.isValid("Avida Dollars", "Salvador Dali");
        
    assertTrue(isValidAnagram);
}

4. Conclusion

In this quick article, we’ve shown how the String might be sorted in alphabetical order in two ways. Also, we’ve implemented the anagram validator which made use of the string sorting method.

As usual, the complete code is available on the Github project.

I just announced the new Spring Boot 2 material, coming in REST With Spring:

>> CHECK OUT THE LESSONS

newest oldest most voted
Notify of
Ben Brumm
Guest
Ben Brumm

Thanks for the helpful article! It’s good how you not only include the code and explanation, but include a use case for sorting the characters in a string – determining if two strings are anagrams of each other. The conversion to lower case is a good point for me to remember too.

Loredana Crusoveanu
Editor

Cool, glad you enjoyed it 🙂