Operasi Rentetan Biasa di Jawa

1. Pengenalan

Nilai dan operasi berdasarkan rentetan cukup umum dalam pembangunan seharian, dan mana-mana pemaju Java mesti dapat mengatasinya.

Dalam tutorial ini, kami akan memberikan helaian cepat operasi String biasa .

Selain itu, kami akan menjelaskan perbezaan antara sama dengan “==” dan antara StringUtils # isBlank dan # isEmpty.

2. Mengubah Char menjadi Rentetan

A char mewakili satu aksara di Jawa. Tetapi dalam kebanyakan kes, kita memerlukan tali.

Oleh itu, mari kita mulakan dengan mengubah watak menjadi String s :

String toStringWithConcatenation(final char c) { return String.valueOf(c); }

3. Menambah Rentetan

Operasi lain yang sering diperlukan ialah menambahkan rentetan dengan nilai lain, seperti char :

String appendWithConcatenation(final String prefix, final char c) { return prefix + c; }

Kita boleh menambahkan jenis asas lain dengan StringBuilder juga :

String appendWithStringBuilder(final String prefix, final char c) { return new StringBuilder(prefix).append(c).toString(); }

4. Mendapatkan Perwatakan mengikut Indeks

Sekiranya kita perlu mengekstrak satu watak dari rentetan, API menyediakan semua yang kita mahukan:

char getCharacterByIndex(final String text, final int index) { return text.charAt(index); }

Oleh kerana String menggunakan char [] sebagai struktur data sokongan, indeks bermula pada sifar .

5. Mengendalikan Nilai ASCII

Kita boleh menukar antara char dan representasi numeriknya (ASCII) dengan mudah:

int asciiValue(final char character) { return (int) character; } char fromAsciiValue(final int value) { Assert.isTrue(value >= 0 && value < 65536, "value is not a valid character"); return (char) value; }

Sudah tentu, kerana int adalah 4 byte yang tidak ditandatangani dan char adalah 2 byte yang tidak ditandatangani, kita perlu memeriksa untuk memastikan bahawa kita bekerja dengan nilai watak sah.

6. Mengeluarkan Semua Ruang Kosong

Kadang-kadang kita perlu menyingkirkan beberapa watak, biasanya ruang kosong. Cara yang baik adalah dengan menggunakan kaedah Replet All dengan ungkapan biasa:

String removeWhiteSpace(final String text) { return text.replaceAll("\\s+", ""); }

7. Menyertai Koleksi ke Rentetan

Kes penggunaan biasa yang lain adalah ketika kita mempunyai semacam Koleksi dan ingin membuat rentetan daripadanya:

 String fromCollection(final Collection collection) { return collection.stream().map(Objects::toString).collect(Collectors.joining(", ")); }

Perhatikan bahawa Collectors.joining membolehkan menentukan awalan atau akhiran.

8. Memisahkan Rentetan

Atau sebaliknya, kita boleh membahagikan rentetan dengan pembatas menggunakan kaedah pemisahan :

String[] splitByRegExPipe(final String text)  return text.split("\\

Sekali lagi, kita menggunakan ungkapan biasa di sini, kali ini untuk dipisahkan dengan paip. Oleh kerana kita mahu menggunakan watak khas, kita harus melepaskannya.

Kemungkinan lain adalah menggunakan kelas Corak :

String[] splitByPatternPipe(final String text) ")); 

9. Memproses Semua Watak sebagai Aliran

Sekiranya pemprosesan terperinci, kita dapat mengubah rentetan menjadi IntStream :

IntStream getStream(final String text) { return text.chars(); }

10. Kesaksamaan Rujukan dan Kesamaan Nilai

Walaupun tali kelihatan seperti jenis primitif, ia tidak begitu.

Oleh itu, kita harus membezakan antara persamaan rujukan dan persamaan nilai. Kesamaan rujukan selalu menunjukkan kesamaan nilai, tetapi secara umum bukan sebaliknya. Yang pertama, kita periksa dengan operasi '==' dan yang terakhir, dengan kaedah sama :

@Test public void whenUsingEquals_thenWeCheckForTheSameValue() { assertTrue("Values are equal", new String("Test").equals("Test")); } @Test public void whenUsingEqualsSign_thenWeCheckForReferenceEquality() { assertFalse("References are not equal", new String("Test") == "Test"); }

Perhatikan bahawa literal dilatih di kumpulan tali. Oleh itu penyusun kadang-kadang dapat mengoptimumkannya dengan rujukan yang sama:

@Test public void whenTheCompileCanBuildUpAString_thenWeGetTheSameReference() { assertTrue("Literals are concatenated by the compiler", "Test" == "Te"+"st"); }

11. String Kosong vs String Kosong

Terdapat perbezaan halus antara isBlank dan isEmpty .

Satu rentetan kosong jika ia null atau mempunyai panjang sifar. Manakala rentetan kosong jika kosong atau hanya mengandungi aksara ruang kosong:

@Test public void whenUsingIsEmpty_thenWeCheckForNullorLengthZero() { assertTrue("null is empty", isEmpty(null)); assertTrue("nothing is empty", isEmpty("")); assertFalse("whitespace is not empty", isEmpty(" ")); assertFalse("whitespace is not empty", isEmpty("\n")); assertFalse("whitespace is not empty", isEmpty("\t")); assertFalse("text is not empty", isEmpty("Anything!")); } @Test public void whenUsingIsBlank_thenWeCheckForNullorOnlyContainingWhitespace() { assertTrue("null is blank", isBlank(null)); assertTrue("nothing is blank", isBlank("")); assertTrue("whitespace is blank", isBlank("\t\t \t\n\r")); assertFalse("test is not blank", isBlank("Anything!")); }

12. Kesimpulannya

String adalah jenis inti dalam semua jenis aplikasi. Dalam tutorial ini, kami mempelajari beberapa operasi utama dalam senario biasa.

Selanjutnya, kami memberi arahan kepada rujukan yang lebih terperinci.

Akhirnya, kod lengkap dengan semua contoh boleh didapati di repositori GitHub kami.