Operasi String Umum di Java

1. Perkenalan

Nilai dan operasi berbasis string cukup umum dalam pengembangan sehari-hari, dan setiap pengembang Java harus mampu menanganinya.

Dalam tutorial ini, kami akan memberikan lembar contekan singkat tentang operasi String umum .

Selain itu, kami akan menjelaskan perbedaan antara sama dengan dan "==" dan antara StringUtils # isBlank dan # isEmpty.

2. Mengubah Char menjadi String

Sebuah Char mewakili satu karakter di Jawa. Tapi dalam banyak kasus, kita membutuhkan String.

Jadi mari kita mulai dengan mengubah karakter menjadi String s :

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

3. Menambahkan String

Operasi lain yang sering dibutuhkan adalah menambahkan string dengan nilai lain, seperti char :

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

Kita bisa menambahkan jenis dasar lainnya dengan StringBuilder juga :

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

4. Mendapatkan Karakter dengan Indeks

Jika kita perlu mengekstrak satu karakter dari sebuah string, API menyediakan semua yang kita inginkan:

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

Karena String menggunakan char [] sebagai struktur data pendukung, indeks dimulai dari nol .

5. Menangani Nilai ASCII

Kita dapat dengan mudah beralih antara karakter dan representasi numeriknya (ASCII) dengan mentransmisikan:

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; }

Tentu saja, karena int adalah 4 unsigned bytes dan char adalah 2 unsigned bytes, kita perlu memeriksa untuk memastikan bahwa kita bekerja dengan nilai karakter legal.

6. Menghapus Semua Ruang Putih

Terkadang kita perlu menghilangkan beberapa karakter, paling umum spasi. Cara yang baik adalah menggunakan metode replaceAll dengan ekspresi reguler:

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

7. Menggabungkan Koleksi ke String

Kasus penggunaan umum lainnya adalah ketika kita memiliki semacam Collection dan ingin membuat string darinya:

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

Perhatikan bahwa Collectors.joining memungkinkan untuk menentukan awalan atau sufiks.

8. Memisahkan String

Atau di sisi lain, kita dapat membagi string dengan pembatas menggunakan metode split :

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

Sekali lagi, kami menggunakan ekspresi reguler di sini, kali ini untuk memisahkan dengan pipa. Karena kita ingin menggunakan karakter khusus, kita harus menghindarinya.

Kemungkinan lain adalah menggunakan kelas Pola :

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

9. Memproses Semua Karakter sebagai Stream

Dalam kasus pemrosesan mendetail, kita dapat mengubah string menjadi IntStream :

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

10. Kesetaraan Referensi dan Kesetaraan Nilai

Meskipun string terlihat seperti tipe primitif, sebenarnya bukan.

Oleh karena itu, kita harus membedakan antara persamaan referensi dan persamaan nilai. Persamaan referensi selalu mengimplikasikan persamaan nilai, tetapi secara umum tidak sebaliknya. Yang pertama, kita periksa dengan operasi '==' dan yang terakhir, dengan metode sama dengan :

@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 bahwa literal dimasukkan ke dalam kumpulan string. Oleh karena itu, kompilator terkadang dapat mengoptimalkannya ke referensi yang sama:

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

11. String Kosong vs. String Kosong

Ada perbedaan halus antara isBlank dan isEmpty .

Sebuah string kosong jika nol atau memiliki panjang nol. Sedangkan string kosong jika null atau hanya berisi karakter spasi:

@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. Kesimpulan

String adalah tipe inti di semua jenis aplikasi. Dalam tutorial ini, kami mempelajari beberapa operasi utama dalam skenario umum.

Selanjutnya kami memberikan arahan untuk referensi yang lebih detail.

Terakhir, kode lengkap dengan semua contoh tersedia di repositori GitHub kami.