Сортировка строки по алфавиту в Java

Сортировка строки по алфавиту в Java

1. обзор

В этом руководстве мы покажем, как отсортироватьString по алфавиту.

Может быть множество причин, по которым мы хотели бы это сделать - одна из них может быть проверкой, если два слова состоят из одного и того же набора символов. Таким образом, мы проверим, являются ли они анаграммой.

2. Сортировка строки

ВнутреннеString использует массив символов для работы. Следовательно, мы можем использовать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");
}

В Java 8 мы можем использовать APIStream для сортировки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().

Обратите внимание, что это символыsorted by its ASCII codes, поэтому заглавные буквы всегда будут в начале. Итак, если мы хотим отсортировать «abC», результатом сортировки будет «Cab».

Для ее решения нам нужноtransform the string with toLowerCase() method. Мы собираемся сделать это в нашем примере с валидатором Anagram.

3. тестирование

Чтобы протестировать сортировку, мы построим валидатор анаграмм. Как уже упоминалось, анаграмма возникает, когда два разных слова или предложения составлены из одного и того же набора символов.

Давайте посмотрим на наш класс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 можно отсортировать в алфавитном порядке двумя способами. Кроме того, мы реализовали валидатор анаграмм, в котором использовался метод сортировки строк.

Как обычно, полный код доступен наGithub project.