Periksa apakah String adalah Pangram di Jawa

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan belajar memeriksa, apakah string yang diberikan adalah pangram yang sah atau tidak menggunakan program Java yang sederhana. A pangram sebarang rentetan yang mengandungi semua huruf satu set abjad diberikan sekurang-kurangnya sekali.

2. Pangrams

Pangrams berlaku untuk tidak hanya bahasa Inggeris, tetapi juga untuk bahasa lain yang memiliki set karakter tetap.

Sebagai contoh, pangram Inggeris yang biasa dikenali adalah "Rubah coklat cepat melompat ke atas anjing yang malas". Begitu juga, ini terdapat dalam bahasa lain.

3. Menggunakan a untuk Gelung

Pertama, mari kita cuba gelung untuk . Kami akan mengisi susunan Boolean dengan penanda untuk setiap watak abjad.

Kod kembali benar apabila semua nilai dalam array penanda ditetapkan ke true :

public static boolean isPangram(String str) { if (str == null) { return false; } Boolean[] alphabetMarker = new Boolean[ALPHABET_COUNT]; Arrays.fill(alphabetMarker, false); int alphabetIndex = 0; str = str.toUpperCase(); for (int i = 0; i < str.length(); i++) { if ('A' <= str.charAt(i) && str.charAt(i) <= 'Z') { alphabetIndex = str.charAt(i) - 'A'; alphabetMarker[alphabetIndex] = true; } } for (boolean index : alphabetMarker) { if (!index) { return false; } } return true; }

Mari uji pelaksanaan kami:

@Test public void givenValidString_isPanagram_shouldReturnSuccess() { String input = "Two driven jocks help fax my big quiz"; assertTrue(Pangram.isPangram(input)); }

4. Menggunakan Aliran Java

Pendekatan alternatif melibatkan penggunaan Java Streams API. Kita dapat membuat aliran watak yang disaring dari teks input yang diberikan dan membuat Peta abjad menggunakan aliran .

Kod mengembalikan kejayaan sekiranya ukuran Peta sama dengan ukuran abjad. Untuk bahasa Inggeris, ukuran yang diharapkan adalah 26:

public static boolean isPangramWithStreams(String str) { if (str == null) { return false; } String strUpper = str.toUpperCase(); Stream filteredCharStream = strUpper.chars() .filter(item -> ((item >= 'A' && item  (char) c); Map alphabetMap = filteredCharStream.collect(Collectors.toMap(item -> item, k -> Boolean.TRUE, (p1, p2) -> p1)); return alphabetMap.size() == ALPHABET_COUNT; }

Dan, tentu saja, mari kita uji:

@Test public void givenValidString_isPangramWithStreams_shouldReturnSuccess() { String input = "The quick brown fox jumps over the lazy dog"; assertTrue(Pangram.isPangramWithStreams(input)); }

5. Mengubah suai untuk Pangrams Sempurna

Pangram yang sempurna sedikit berbeza daripada pangram biasa. A pangram sempurna terdiri daripada setiap huruf abjad tepat sekali berbanding dengan sekurang-kurangnya sekali untuk pangram a.

Kod tersebut akan menjadi benar apabila kedua-dua ukuran Peta sama dengan ukuran abjad dan frekuensi setiap watak dalam abjad adalah tepat:

public static boolean isPerfectPangram(String str) { if (str == null) { return false; } String strUpper = str.toUpperCase(); Stream filteredCharStream = strUpper.chars() .filter(item -> ((item >= 'A' && item  (char) c); Map alphabetFrequencyMap = filteredCharStream.collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); return alphabetFrequencyMap.size() == ALPHABET_COUNT && alphabetFrequencyMap.values().stream().allMatch(item -> item == 1); }

Dan mari kita uji:

@Test public void givenPerfectPangramString_isPerfectPangram_shouldReturnSuccess() { String input = "abcdefghijklmNoPqrStuVwxyz"; assertTrue(Pangram.isPerfectPangram(input)); }

Pangram yang sempurna harus mempunyai setiap watak tepat sekali. Oleh itu, pangram kami sebelum ini harus gagal:

String input = "Two driven jocks help fax my big quiz"; assertFalse(Pangram.isPerfectPangram(input));

Dalam kod di atas, input rentetan yang diberikan mempunyai beberapa pendua, seperti yang mempunyai dua o. Oleh itu outputnya adalah salah .

5. Kesimpulan

Dalam artikel ini, kami telah membahas pelbagai pendekatan penyelesaian untuk mengetahui sama ada rentetan yang diberikan adalah pangram yang sah atau tidak.

Kami juga membincangkan satu lagi rasa pangram yang dipanggil pangram sempurna & bagaimana mengenalinya secara terprogram.

Contoh kod boleh didapati di GitHub.