Expand Authors Top

If you have a few years of experience in the Java ecosystem and you’d like to share that with the community, have a look at our Contribution Guidelines.

Expanded Audience – Frontegg – Security (partner)
announcement - icon User management is very complex, when implemented properly. No surprise here.

Not having to roll all of that out manually, but instead integrating a mature, fully-fledged solution - yeah, that makes a lot of sense.
That's basically what Frontegg is - User Management for your application. It's focused on making your app scalable, secure and enjoyable for your users.
From signup to authentication, it supports simple scenarios all the way to complex and custom application logic.

Have a look:

>> Elegant User Management, Tailor-made for B2B SaaS

November Discount Launch 2022 – Top
We’re finally running a Black Friday launch. All Courses are 30% off until end-of-day today:

>> GET ACCESS NOW

November Discount Launch 2022 – TEMP TOP (NPI)
We’re finally running a Black Friday launch. All Courses are 30% off until end-of-day today:

>> GET ACCESS NOW

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.

November Discount Launch 2022 – Bottom
We’re finally running a Black Friday launch. All Courses are 30% off until end-of-day today:

>> GET ACCESS NOW

Generic footer banner
2 Comments
Oldest
Newest
Inline Feedbacks
View all comments
Comments are closed on this article!