Рубрики
Без рубрики

Сортировка строки в алфавитном порядке в Java

Взгляните на различные способы сортировки строки в алфавитном порядке в Java.

Автор оригинала: Denis Szczukocki.

1. Обзор

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

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

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

Внутренне String использует массив символов для работы. Поэтому мы можем использовать метод toCharArray(): char [] , отсортировать массив и создать новую Строку на основе результата:

@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 для сортировки Строки для нас:

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

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

Здесь мы используем тот же алгоритм, что и в первом примере, но сортируем массив символов с помощью метода Stream sorted () .

Обратите внимание, что символы отсортированы по кодам ASCII , поэтому заглавные буквы всегда будут встречаться в начале. Итак, если мы хотим отсортировать “abC”, результатом сортировки будет “Cab”.

Чтобы решить эту проблему, нам нужно преобразовать строку с помощью toLowerCase() метода . Мы собираемся сделать это в нашем примере с валидатором анаграмм.

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

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

Давайте взглянем на наш Валидатор анаграмм класс:

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. Заключение

В этой краткой статье мы показали, как Строка может быть отсортирована в алфавитном порядке двумя способами. Кроме того, мы внедрили валидатор анаграмм, в котором использовался метод сортировки строк.

Как обычно, полный код доступен в проекте GitHub .