Een string alfabetisch sorteren in Java

1. Overzicht

In deze zelfstudie laten we zien hoe u kunt sorteren Draad alfabetisch.

Er kunnen genoeg redenen zijn waarom we het zouden willen doen - een daarvan zou validatie kunnen zijn als twee woorden uit dezelfde tekenset bestaan. Op die manier zullen we controleren of ze een anagram zijn.

2. Een string sorteren

Intern, Draad gebruikt een reeks tekens om mee te werken. Daarom kunnen we gebruik maken van de toCharArray (): char [] methode, sorteert u de array en maakt u een nieuw Draad op basis van het resultaat:

@Test ongeldig gegevenString_whenSort_thenSorted () {String abcd = "bdca"; char [] chars = abcd.toCharArray (); Arrays.sort (tekens); String gesorteerd = nieuwe String (tekens); assertThat (gesorteerd) .isEqualTo ("abcd"); }

In Java 8 kunnen we de Stroom API om het Draad voor ons:

@Test ongeldig gegevenString_whenSortJava8_thenSorted () {String gesorteerd = "bdca" .chars () .sorted () .collect (StringBuilder :: nieuw, StringBuilder :: appendCodePoint, StringBuilder :: append) .toString (); assertThat (gesorteerd) .isEqualTo ("abcd"); }

Hier gebruiken we hetzelfde algoritme als in het eerste voorbeeld, maar sorteren we de char-array met de Stream gesorteerd () methode.

Merk op dat karakters dat zijn gesorteerd op zijn ASCII-codesdaarom zullen hoofdletters altijd aan het begin voorkomen. Dus als we "abC" willen sorteren, is het resultaat van het sorteren "Cab".

Om het op te lossen, moeten we transformeer de string met toLowerCase () methode. We gaan dat doen in ons voorbeeld van de Anagram-validator.

3. Testen

Om het sorteren te testen, bouwen we de anagramvalidator. Zoals gezegd treedt een anagram op wanneer twee verschillende woorden of zinnen zijn samengesteld uit dezelfde reeks tekens.

Laten we eens kijken naar onze AnagramValidator klasse:

openbare klasse AnagramValidator {openbare statische boolean isValid (String-tekst, String-anagram) {text = voorbereiden (tekst); anagram = voorbereiden (anagram); String gesorteerdText = sort (tekst); String gesorteerdAnagram = sorteren (anagram); retourneer gesorteerdeText.equals (gesorteerdAnagram); } privé statische String-sortering (String-tekst) {char [] chars = bereid (tekst) .toCharArray (); Arrays.sort (tekens); retourneer nieuwe String (tekens); } private static String prepar (String text) {return text.toLowerCase () .trim () .replaceAll ("\ s +", ""); }}

Nu gaan we onze sorteermethode gebruiken en controleren of het anagram geldig is:

@Test ongeldig gegevenValidAnagrams_whenSorted_thenEqual () {boolean isValidAnagram = AnagramValidator.isValid ("Avida Dollars", "Salvador Dali"); assertTrue (isValidAnagram); }

4. Conclusie

In dit korte artikel hebben we laten zien hoe de Draad kan op twee manieren in alfabetische volgorde worden gesorteerd. We hebben ook de anagramvalidator geïmplementeerd die gebruik heeft gemaakt van de string-sorteermethode.

Zoals gewoonlijk is de volledige code beschikbaar op het GitHub-project.