Eine Zeichenkette in Java alphabetisch sortieren
1. Überblick
In diesem Tutorial zeigen wir, wieString alphabetisch sortiert werden.
Es kann viele Gründe geben, warum wir dies gerne tun würden - einer davon könnte die Validierung sein, wenn zwei Wörter aus demselben Zeichensatz bestehen. Auf diese Weise überprüfen wir, ob es sich um ein Anagramm handelt.
2. Eine Zeichenfolge sortieren
Intern verwendetString ein Array von Zeichen, um damit zu arbeiten. Daher können wirtoCharArray() : char[] method, sort the array and create a new String based on the result: verwenden
@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 können wir dieStream-API nutzen, um dieString für uns zu sortieren:
@Test
void givenString_whenSortJava8_thenSorted() {
String sorted = "bdca".chars()
.sorted()
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
assertThat(sorted).isEqualTo("abcd");
}
Hier verwenden wir denselben Algorithmus wie im ersten Beispiel, sortieren das char-Array jedoch nach der MethodeStream sorted().
Beachten Sie, dass Zeichensorted by its ASCII codes sind. Daher werden Großbuchstaben immer am Anfang angezeigt. Wenn wir also "abC" sortieren möchten, lautet das Ergebnis der Sortierung "Cab".
Um es zu lösen, brauchen wirtransform the string with toLowerCase() method. Das machen wir in unserem Anagram-Validator-Beispiel.
3. Testen
Um die Sortierung zu testen, erstellen wir den Anagramm-Validator. Wie bereits erwähnt, tritt ein Anagramm auf, wenn zwei verschiedene Wörter oder Sätze aus derselben Zeichenmenge bestehen.
Werfen wir einen Blick auf unsereAnagramValidator-Klasse:
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+", "");
}
}
Jetzt werden wir unsere Sortiermethode verwenden und überprüfen, ob das Anagramm gültig ist:
@Test
void givenValidAnagrams_whenSorted_thenEqual() {
boolean isValidAnagram = AnagramValidator.isValid("Avida Dollars", "Salvador Dali");
assertTrue(isValidAnagram);
}
4. Fazit
In diesem kurzen Artikel haben wir gezeigt, wie dieString auf zwei Arten in alphabetischer Reihenfolge sortiert werden können. Außerdem haben wir den Anagramm-Validator implementiert, der die Sortiermethode für Zeichenfolgen verwendet.
Wie üblich ist der vollständige Code auf denGithub project verfügbar.