Pengenalan kepada StringUtils

StringUtils ialah kelas Apache Commons yang paling banyak digunakan. Ia mengandungi pelbagai utiliti dan kaedah yang membantu pembangun mengelak daripada menulis boilerplate atau kod yang sukar digunakan untuk operasi asas.

Banyak kaedah dalam kelas StringUtils mempunyai persamaan java.lang.String tetapi, tidak seperti kaedah java.lang.String , adalah selamat nol. Ini bermakna NullPointerException tidak dilemparkan pada saat yang paling tidak dijangka.

Apache Commons mengandungi beberapa kaedah, dan kami akan melihat beberapa kaedah yang paling biasa digunakan.

Senarai kaedah StringUtils:

kosong() Menyemak sama ada rentetan kosong
sama dengan() Membandingkan rentetan
bandingkan() Membandingkan rentetan
Indeks() Mencari subrentetan dalam rentetan
lastIndexOf() Mencari subrentetan dalam rentetan
mengandungi() Menyemak sama ada subrentetan berada dalam rentetan
mengandungiIgnoreCase() Menyemak kejadian subrentetan dalam rentetan, mengabaikan kes
mengandungi Mana-mana() Menyemak sama ada subrentetan berlaku di mana-mana dalam rentetan
mengandungiTiada() Menyemak sama ada subrentetan berlaku di mana-mana dalam rentetan
mengandungiSahaja() Menyemak sama ada subrentetan berada dalam rentetan
subrentetan() Mendapatkan subrentetan
split() Membahagikan rentetan kepada subrentetan
sertai() menggabungkan subrentetan
keluarkan() Mengalih keluar subrentetan
menggantikan() Gantikan subrentetan
countMatches() Mengira bilangan perlawanan

StringUtils.isEmpty() dan StringUtils.isBlank()

Kedua-dua kaedah digunakan untuk menyemak sama ada rentetan mengandungi sebarang teks. Mereka kembali benar jika rentetan itu benar-benar kosong. Selain itu, isBlank() juga akan kembali benar jika rentetan hanya mengandungi ruang.

Mereka juga mempunyai kaedah songsang mereka sendiri: isNotEmpty() dan isNotBlank() .

Mari lihat bagaimana anda boleh menggunakan isEmpty() bersama-sama dengan java.lang.String.isEmpty() rakan sejawatannya , serta isBlank() :

String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(!nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

Terdapat tiga pembolehubah jenis String di sini . Satu mata kepada null , yang kedua bukan null tetapi tidak mempunyai kandungan (rentetan kosong), dan yang ketiga tidak kosong tetapi akan mencetak hasil kosong.

Menjalankan kod ini menghasilkan:

emptyValue is emptyValue
blankValue is blankValue
Exception in thread "main" java.lang.NullPointerException

Kaedah isEmpty() dibina ke dalam java.lang.String tidak selamat nol . Anda akan mendapat NullPointerException dengan mudah jika anda cuba menyemak sama ada ia kosong, kerana anda memanggil kaedah pada rujukan null . Anda perlu menyemak terlebih dahulu sama ada rujukan itu batal:

String nullValue = null;
String emptyValue = "";
String blankValue = "\n \t   \n";

if(StringUtils.isEmpty(emptyValue)) {
   System.out.println("emptyValue is emptyValue");
}

if(StringUtils.isBlank(blankValue)) {
   System.out.println("blankValue is blankValue");
}

if(nullValue != null && !nullValue.isEmpty()) {
   System.out.println("nullString isn't null");
}

Sekarang ini menghasilkan:

emptyValue is emptyValue
blankValue is blankValue

Dan jika kita menguji kaedah ini padanullString:

String nullValue = null;

if(StringUtils.isEmpty(nullValue)) {
   System.out.println("nullValue is emptyValue");
}

if(StringUtils.isBlank(nullValue)) {
   System.out.println("nullValue is blankValue");
}

Kemudian kita dapat:

nullValue is emptyValue
nullValue is blankValue

Kaedah StringUtils adalah selamat nol dan menghasilkan hasil yang diharapkan walaupun ia diluluskan null .

StringUtils.equals()

Kaedah ini membandingkan dua rentetan dan mengembalikan benar jika ia sama atau jika kedua-dua rujukan menghala ke null , tetapi sedar bahawa kaedah ini sensitif huruf besar-besaran.

Mari lihat bagaimana ia berfungsi:

System.out.println(StringUtils.equals(null, null));
System.out.println(StringUtils.equals(null, "some information"));
System.out.println(StringUtils.equals("some information", null));
System.out.println(StringUtils.equals("some information",  "some information"));
System.out.println(StringUtils.equals("some additional information", "some information"));

Keputusan:

true
false
false
true
false

Untuk membandingkan kaedah equals() daripada StringUtils dengan java.lang.String.equals() :

String nullValue = null;

System.out.println(StringUtils.equals(nullValue, null));
System.out.println(StringUtils.equals(nullValue, "some information"));

System.out.println(nullValue.equals(null));
System.out.println(nullValue.equals("some information"));

Ini membawa anda kembali kepada:

true
false
Exception in thread "main" java.lang.NullPointerException

Sekali lagi, memanggil kaedah pada rujukan null menghasilkan NullPointerException , dan anda perlu menyemak sama ada pembolehubah rujukan adalah batal sebelum menggunakannya.

StringUtils.compare()

Pengisytiharan kaedah ini kelihatan seperti ini:

public static int compare(final String str1, final String str2)

Kaedah ini membandingkan dua rentetan secara leksikografik, seperti yang dilakukan oleh kaedah java.lang.String.compareTo() , mengembalikan:

  • 0 jika str1 sama dengan str2 (atau kedua-duanya adalah nol)
  • Nilainya kurang daripada 0 jika str1 kurang daripada str2
  • Nilai lebih besar daripada 0 jika str1 lebih besar daripada str2

Susunan leksikografi ialah susunan kamus. Mari lihat bagaimana kita boleh menggunakan ini dalam program kami:

System.out.println(StringUtils.compare(null, null));
System.out.println(StringUtils.compare(null , "codeGym"));
System.out.println(StringUtils.compare("codeGym", null));
System.out.println(StringUtils.compare("codeGym", "CODEGYM"));
System.out.println(StringUtils.compare("codeGym", "codeGym"));

Kita mendapatkan:

0
-1
1
32
0

Nota: Nilai nol dianggap kurang daripada nilai bukan nol . Dua nilai nol dianggap sama.

Menyemak sama ada rentetan mengandungi subrentetan lain

Untuk melakukan ini, StringUtils mempunyai 5 kaedah:

  • mengandungi()
  • mengandungiIgnoreCase()
  • mengandungi Mana-mana()
  • mengandungiTiada()
  • mengandungiSahaja()

Kaedah contains() mengembalikan benar atau salah bergantung pada sama ada urutan carian terkandung dalam urutan lain atau tidak.

Jika null diserahkan kepada kaedah sedemikian , ia akan mengembalikan palsu . Jika bukan null diluluskan , kaedah hanya akan memanggil java.lang.String.indexOf(String str) pada objek yang diluluskan.

Contoh:

String value = "CodeGym is cool";

System.out.println(StringUtils.contains(null, "a"));
System.out.println(StringUtils.contains(value, "CodeGym"));
System.out.println(StringUtils.contains(value, "C++"));
System.out.println(StringUtils.contains(value, "codegym"));

Kaedah ini sensitif huruf besar-besaran, jadi panggilan terakhir juga akan mengembalikan false :

false
true
false
false

Kaedah containsAny() mengembalikan benar jika rentetan diluluskan sebagai argumen pertama mengandungi sekurang-kurangnya satu daripada subrentetan yang diluluskan dalam argumen 2-N.

Contoh:

String value = "CodeGym is cool";
System.out.println(StringUtils.containsAny(value, "cool", "c00l", "bro", "hello"));

Akan memaparkan:

true

Kaedah ini juga sensitif huruf besar.

containsNone() kaedah

Apabila anda perlu menyemak bahawa rentetan tertentu tidak mengandungi apa-apa daripada senarai, anda boleh menggunakan kaedah containsNone() . Parameter pertama ialah rentetan, dan parameter berikut ialah rentetan yang tidak sepatutnya berada dalam sinki sasaran.

Contoh:

String s = "CodeGym is cool";
System.out.println(StringUtils.containsNone(s, 'g', 'a'));

Output konsol:

false

Bekerja dengan subrentetan

Bekerja dengan subrentetan adalah serupa dengan bekerja dengan kaedah kelas String :

substring(String str, int start)
substring (String str, int start, int end)

Kaedah ini mengembalikan subrentetan daripada rentetan str . Rentetan diberikan oleh dua indeks: mula dan tamat . Dan seperti biasa di Jawa, aksara terakhir julat ialah end-1 . Apakah kelebihan kaedah ini?

Jika anda menghantar null kepada kaedah sedemikian , ia hanya akan mengembalikan null dan bukannya membuang pengecualian. Kaedah ini menyokong nilai indeks negatif. Dalam kes ini, rentetan dianggap sebagai gelung tertutup. Watak terakhir diikuti oleh yang pertama, dan seterusnya.

Mari lihat bagaimana kita boleh menggunakannya:

System.out.println(StringUtils.substring("lets java", 2, 6));
System.out.println(StringUtils.substring("lets java", -8));
System.out.println(StringUtils.substring(null, 3));

Menjalankan kod di atas memberi kita:

ts j
ets java
null

StringUtils.split()

Kaedah yang membolehkan anda membahagikan rentetan kepada subrentetan menggunakan aksara pembatas khas. Jika terdapat satu dalam rentetan sasaran, maka kaedah itu akan mengembalikan tatasusunan subrentetan. Jika tiada aksara, tatasusunan kosong akan dikembalikan. Nah, jika null dihantar ke kaedah , ia akan mengembalikan null . Mari kita lihat kod ini dan cara kaedah ini berfungsi:

String myData = "Address, City, State, Zip, Phone, Email, Password";

System.out.println(Arrays.toString(StringUtils.split(myData, ',')));
System.out.println(Arrays.toString(StringUtils.split(null, '.')));
System.out.println(Arrays.toString(StringUtils.split("", '.')));

Keputusan:

[Address,  City,  State,  Zip,  Phone,  Email,  Password]
null
[]

StringUtils.join()

Kaedah join() membolehkan anda menggabungkan tatasusunan rentetan ke dalam rentetan tunggal. Pada masa yang sama, watak pemisah khas boleh dihantar kepadanya, yang akan ditambah antara subrentetan dalam rentetan yang terhasil. Dan jika null dihantar ke kaedah , maka ia akan mengembalikan null .

Kaedah ini adalah bertentangan dengan kaedah split() . Mari lihat contoh mudah ini:

String myData = "Address, City, State, Zip, Phone, Email, Password";

String[] myString =  StringUtils.split(myData, ',');
System.out.println(StringUtils.join(myString, '-'));

Menjalankan kod di atas memberi kita:

Address- City- State- Zip- Phone- Email- Password

StringUtils.replace()

Mencari rentetan dalam rentetan, mencarinya jika ia wujud dan menggantikan semua kemunculannya dengan rentetan baharu.

Pengisytiharan kaedah ini kelihatan seperti ini:

public static String replace(final String text, final String searchString, final String replacement)

Jika rentetan carian tidak ditemui dalam teks, maka tiada apa yang akan berlaku dan teks akan kekal sama. Mengikut logik yang sama, jika teks adalah null , kaedah ini mengembalikan null . Jika anda sedang mencari rentetan nol atau menggantikan rentetan kecil dengan null , maka kaedah tersebut akan mengembalikan rentetan asal.

Mari cuba kaedah ini:

String value = "CodeGym is the best";
System.out.println(StringUtils.replace(value, "best", "cool"));

Keputusan:

CodeGym is the cool