Сортировка строки по алфавиту в 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.