Menyusun rentetan mengikut abjad di Jawa

1. Gambaran keseluruhan

Dalam tutorial ini, kami akan menunjukkan cara menyusun String mengikut abjad.

Mungkin ada banyak sebab mengapa kita mahu melakukannya - salah satunya boleh menjadi pengesahan jika dua perkataan terdiri daripada set watak yang sama. Dengan cara itu, kami akan mengesahkan apakah itu anagram.

2. Menyusun tali

Secara dalaman, String menggunakan pelbagai watak untuk beroperasi. Oleh itu, kita dapat menggunakan kaedah toCharArray (): char [] , menyusun susunan dan membuat String baru berdasarkan hasilnya:

@Test void givenString_whenSort_thenSorted() { String abcd = "bdca"; char[] chars = abcd.toCharArray(); Arrays.sort(chars); String sorted = new String(chars); assertThat(sorted).isEqualTo("abcd"); }

Di Java 8, kita dapat memanfaatkan Stream API untuk menyusun String untuk kita:

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

Di sini, kami menggunakan algoritma yang sama dengan contoh pertama, tetapi menyusun array char menggunakan kaedah Stream sorted () .

Perhatikan, bahawa watak disusun mengikut kod ASCIInya , oleh itu, huruf besar akan selalu muncul pada awalnya. Jadi, jika kita ingin menyusun "abC" hasil penyortiran akan menjadi "Cab".

Untuk menyelesaikannya, kita perlu mengubah rentetan dengan kaedah toLowerCase () . Kami akan melakukannya dalam contoh pengesahan Anagram kami.

3. Menguji

Untuk menguji penyortiran, kami akan membina pengesahan anagram. Seperti yang disebutkan, anagram berlaku apabila dua perkataan atau ayat yang berlainan terdiri daripada kumpulan watak yang sama.

Mari lihat kelas AnagramValidator kami :

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+", ""); } }

Sekarang, kita akan menggunakan kaedah penyortiran dan mengesahkan sama ada anagram itu sah:

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

4. Kesimpulan

Dalam artikel ringkas ini, kami telah menunjukkan bagaimana String dapat disusun mengikut urutan abjad dengan dua cara. Juga, kami telah melaksanakan pengesahan anagram yang menggunakan kaedah menyusun tali.

Seperti biasa, kod lengkap boleh didapati di projek GitHub.