Giới thiệu về StringUtils

StringUtils là lớp Apache Commons được sử dụng nhiều nhất. Nó chứa các tiện ích và phương pháp khác nhau giúp các nhà phát triển tránh viết bản soạn sẵn hoặc đơn giản là mã khó sử dụng cho các hoạt động cơ bản.

Nhiều phương thức trong lớp StringUtils có các phương thức java.lang.String tương đương nhưng, không giống như các phương thức java.lang.String , không an toàn. Điều này có nghĩa là một NullPulumException không bị ném vào thời điểm bất ngờ nhất.

Apache Commons chứa một số phương thức và chúng ta sẽ xem xét một số phương thức được sử dụng phổ biến nhất.

Danh sách các phương thức StringUtils:

isEmpty() Kiểm tra nếu một chuỗi rỗng
bằng() So sánh chuỗi
so sánh() So sánh chuỗi
Chỉ số() Tìm một chuỗi con trong một chuỗi
lastIndexOf() Tìm một chuỗi con trong một chuỗi
chứa() Kiểm tra xem một chuỗi con có trong một chuỗi không
chứaIgnoreCase() Kiểm tra sự xuất hiện của một chuỗi con trong một chuỗi, bỏ qua trường hợp
chứa Any() Kiểm tra xem một chuỗi con có xuất hiện ở bất kỳ đâu trong một chuỗi không
chứaNone() Kiểm tra xem một chuỗi con có xuất hiện ở bất kỳ đâu trong một chuỗi không
chứaOnly() Kiểm tra xem một chuỗi con có trong một chuỗi không
chuỗi con() Lấy một chuỗi con
tách ra() Tách một chuỗi thành các chuỗi con
tham gia() nối chuỗi con
di dời() Loại bỏ một chuỗi con
thay thế() Thay thế chuỗi con
đếmMatch() Đếm số trận đấu

StringUtils.isEmpty() và StringUtils.isBlank()

Cả hai phương pháp đều được sử dụng để kiểm tra xem một chuỗi có chứa bất kỳ văn bản nào không. Chúng trả về true nếu chuỗi thực sự trống. Ngoài ra, isBlank() cũng sẽ trả về true nếu chuỗi chỉ chứa khoảng trắng.

Chúng cũng có các phương thức nghịch đảo của riêng chúng: isNotEmpty()isNotBlank() .

Hãy xem cách bạn có thể sử dụng isEmpty() cùng với bản sao java.lang.String.isEmpty() của nó , cũng như 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");
}

Có ba biến kiểu String ở đây . Một điểm đến null , điểm thứ hai không phải là null nhưng không có nội dung (một chuỗi trống) và điểm thứ ba không trống nhưng sẽ in kết quả trống.

Chạy mã này dẫn đến:

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

Phương thức isEmpty() được tích hợp trong java.lang.String không phải là null an toàn . Bạn sẽ dễ dàng nhận được một NullPulumException nếu bạn cố kiểm tra xem nó có trống không, bởi vì bạn gọi phương thức này trên một tham chiếu null . Cần phải kiểm tra trước xem tham chiếu có rỗng không:

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

Bây giờ điều này dẫn đến:

emptyValue is emptyValue
blankValue is blankValue

Và nếu chúng ta thử nghiệm các phương pháp này trênnullString:

String nullValue = null;

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

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

Sau đó, chúng tôi nhận được:

nullValue is emptyValue
nullValue is blankValue

Các phương thức StringUtils là null an toàn và tạo ra kết quả như mong đợi ngay cả khi chúng được thông qua null .

StringUtils.equals()

Phương thức này so sánh hai chuỗi và trả về true nếu chúng giống hệt nhau hoặc nếu cả hai tham chiếu đều trỏ đến null , nhưng lưu ý rằng phương thức này phân biệt chữ hoa chữ thường.

Hãy xem nó hoạt động như thế nào:

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"));

Kết quả:

true
false
false
true
false

Để so sánh phương thức equals() từ StringUtils với 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"));

Điều này đưa bạn trở lại:

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

Một lần nữa, gọi một phương thức trên tham chiếu null sẽ dẫn đến NullPulumException và bạn sẽ cần kiểm tra xem biến tham chiếu có phải là null hay không trước khi sử dụng nó.

StringUtils.so sánh ()

Tuyên bố của phương pháp này trông như thế này:

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

Phương thức này so sánh hai chuỗi theo từ điển, giống như phương thức java.lang.String.compareTo() , trả về:

  • 0 nếu str1 bằng str2 (hoặc cả hai đều rỗng)
  • Giá trị nhỏ hơn 0 nếu str1 nhỏ hơn str2
  • Giá trị lớn hơn 0 nếu str1 lớn hơn str2

Thứ tự từ điển là thứ tự từ điển. Hãy xem cách chúng ta có thể sử dụng điều này trong chương trình của mình:

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"));

Chúng tôi nhận được:

0
-1
1
32
0

Lưu ý: Giá trị null được coi là nhỏ hơn giá trị không null . Hai giá trị null được coi là bằng nhau.

Kiểm tra xem một chuỗi có chứa một chuỗi con khác không

Để làm điều này, StringUtils có 5 phương thức:

  • chứa()
  • chứaIgnoreCase()
  • chứa Any()
  • chứaNone()
  • chứaOnly()

Phương thức chứa() trả về true hoặc false tùy thuộc vào chuỗi tìm kiếm có nằm trong chuỗi khác hay không.

Nếu null được truyền cho một phương thức như vậy , nó sẽ trả về false . Nếu không null được truyền , phương thức sẽ chỉ gọi java.lang.String.indexOf(String str) trên đối tượng được truyền.

Ví dụ:

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"));

Phương thức này phân biệt chữ hoa chữ thường, vì vậy lệnh gọi cuối cùng cũng sẽ trả về false :

false
true
false
false

Phương thức chứaAny() trả về true nếu chuỗi được truyền dưới dạng đối số đầu tiên chứa ít nhất một trong các chuỗi con được truyền trong đối số 2-N.

Ví dụ:

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

Sẽ hiển thị:

true

Phương pháp này cũng phân biệt chữ hoa chữ thường.

phương thức chứaNone()

Khi bạn cần kiểm tra xem một chuỗi nào đó không chứa bất kỳ thứ gì trong danh sách, bạn có thể sử dụng phương thức containsNone() . Tham số đầu tiên là một chuỗi và các tham số sau là các chuỗi không nên có trong phần chìm đích.

Ví dụ:

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

Đầu ra bảng điều khiển:

false

Làm việc với chuỗi con

Làm việc với các chuỗi con tương tự như làm việc với các phương thức của lớp Chuỗi :

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

Các phương thức này trả về một chuỗi con từ chuỗi str . Chuỗi được đưa ra bởi hai chỉ số: bắt đầukết thúc . Và như thường lệ trong Java, ký tự cuối cùng của phạm vi là end-1 . Ưu điểm của các phương pháp này là gì?

Nếu bạn chuyển null cho một phương thức như vậy , nó sẽ chỉ trả về null thay vì đưa ra một ngoại lệ. Các phương thức này hỗ trợ các giá trị chỉ số âm. Trong trường hợp này, chuỗi được coi là một vòng khép kín. Ký tự cuối cùng được theo sau bởi ký tự đầu tiên, v.v.

Hãy xem làm thế nào chúng ta có thể sử dụng nó:

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

Chạy đoạn mã trên cho chúng ta:

ts j
ets java
null

StringUtils.split()

Một phương thức cho phép bạn tách một chuỗi thành các chuỗi con bằng cách sử dụng một ký tự phân cách đặc biệt. Nếu có một trong chuỗi mục tiêu, thì phương thức sẽ trả về một mảng các chuỗi con. Nếu không có ký tự nào, một mảng trống sẽ được trả về. Chà, nếu null được truyền cho phương thức , nó sẽ trả về null . Chúng ta hãy xem mã này và cách thức hoạt động của phương thức:

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("", '.')));

Kết quả:

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

StringUtils.join()

Phương thức join() cho phép bạn nối một mảng các chuỗi thành một chuỗi duy nhất. Đồng thời, một ký tự phân cách đặc biệt có thể được truyền cho nó, ký tự này sẽ được thêm vào giữa các chuỗi con trong chuỗi kết quả. Và nếu null được truyền cho phương thức , thì nó sẽ trả về null .

Phương thức này hoàn toàn ngược lại với phương thức split() . Hãy xem ví dụ đơn giản này:

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

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

Chạy đoạn mã trên cho chúng ta:

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

StringUtils.replace()

Tìm kiếm một chuỗi trong một chuỗi, tìm thấy nó nếu nó tồn tại và thay thế tất cả các lần xuất hiện của nó bằng một chuỗi mới.

Tuyên bố của phương pháp này trông như thế này:

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

Nếu chuỗi tìm kiếm không tìm thấy trong văn bản, thì sẽ không có gì xảy ra và văn bản sẽ được giữ nguyên. Theo logic tương tự, nếu văn bản là null , phương thức này trả về null . Nếu bạn đang tìm kiếm một chuỗi null hoặc thay thế một chuỗi con bằng null , thì phương thức này sẽ trả về chuỗi ban đầu.

Hãy thử phương pháp này:

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

Kết quả:

CodeGym is the cool