1.概要

このチュートリアルでは、

String

をアルファベット順に並べ替える方法を説明します。

2つの単語が同じ文字セットで構成されている場合、その1つが検証である可能性があります。このようにして、アナグラムであるかどうかを確認します。

2.文字列をソートする

内部的には、

String

は操作に文字の配列を使用します。したがって、**

toCharArray():char[]

メソッドを使用して、配列をソートし、その結果に基づいて新しい

String

を作成できます。

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

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

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

Java 8では、

Stream

APIを利用して

String

をソートすることができます。

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

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

ここでは、最初の例と同じアルゴリズムを使用していますが、

Stream sorted()

メソッドを使用してchar配列をソートしています。

文字はASCIIコードでソートされているため、大文字は常に先頭に表示されます。したがって、「abC」をソートしたい場合、ソート結果は「Cab」になります。

それを解決するために、

toLowerCase()

method ** で文字列を変換する必要があります。 Anagramバリデータの例でこれを行います。

3.テスト

並べ替えをテストするために、アナグラムバリデータを作成します。前述のように、アナグラムは、2つの異なる単語または文が同じ文字セットの複合であるときに発生します。


AnagramValidator

クラスを見てみましょう。

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+", "");
    }
}

それでは、並べ替え方法を使用してアナグラムが有効かどうかを確認します。

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

    assertTrue(isValidAnagram);
}

4.まとめ

この簡単な記事では、

String

が2つの方法でアルファベット順に並べ替えられる方法を説明しました。また、文字列の並べ替え方法を利用したアナグラムバリデータを実装しました。

いつものように、完全なコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings[Githubプロジェクト]で利用可能です。