Xử lý String với Apache Commons Lang 3

Apache Commoms Lang 3 một thư viện java phổ biến, cung cấp các class tiện ích nhầm mở rộng các chức năng của Java API.

Thư viện này hỗ trợ khá nhiều tính năng từ thao tác stringarraycollection, reflection và concurrency, đến việc triển khai một số cấu trúc dữ liệu có thứ tự như Pair, Triples. 

Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về StringUtils class hỗ trợ xử lý chuỗi trong Java.

Maven Dependency

StringUtils được cung cấp trong thư viện Apache Commons Lang 3, để sử dụng StringUtils trước tiên chúng ta cần thêm maven dependency của Apache Commons Lang 3.

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.9</version>
</dependency>

Để sử dụng phiên bản Apache Commoms Lang 3 mới nhất các bạn có thể vào trang chủ để download.

StringUtils class

StringUtils class cung cấp rất nhiều method hỗ trợ thao tác với String, tuy nhiên có một số method trùng lặp mà String class cũng đã hỗ trợ như compare() method.

public static int compare(String str1, String str2)

Trong bài viết này chúng ta sẽ bỏ qua các method trùng lặp giữa String class và StringUtils class. Thay vào đó chúng ta sẽ tìm hiểu các method riêng của StringUtils class để xem chúng sẽ giúp được gì nha.

StringUtils Field

StringUtils class định nghĩa sẵn cho chúng ta các hằng số thường sử dụng trong String như EMPTY, SPACE, LF, CR, etc

public static final String SPACE = " ";
public static final String EMPTY = "";
public static final String LF = "\n";
public static final String CR = "\r";
public static final int INDEX_NOT_FOUND = -1;

isBlank & isNotBlank

Thông thường, muốn kiểm tra 1 string có rỗng hay không thì chúng ta cần kiểm tra 2 điều kiện #null & != ” 

public boolean isNotNull(String str) {
        return  str != null && !str.equals("");
}

Nếu bạn xác định 1 string chỉ chứa 1 hoặc nhiều whitespace là rỗng thì sẽ có vấn đề đấy, như vậy thì chúng ta cần tiền xử lý bỏ các whitespace ở 2 đầu chuỗi rồi mới tiến hành kiểm tra, rắc rối quá phải không?

Sử dụng isBlank()isNotBlank() sẽ gói gọn các bước cần thực hiện trên để kiểm tra chuỗi.

StringUtils.isNotBlank(""); // FALSE
StringUtils.isNotBlank( "  "); // FALSE
StringUtils.isNotBlank( null); // FALSE

StringUtils.isBlank(""); // TRUE
StringUtils.isBlank( "  "); // TRUE
StringUtils.isBlank( null); // TRUE

containsAny

containsAny() method kiểm tra một string cho trước có chứa một tập các character hoặc một substring hay không?

String string = "shareprogramming.net";
boolean contained1 = StringUtils.containsAny(string, 'a', 'b', 'c'); // TRUE
boolean contained2 = StringUtils.containsAny(string, 'x', 'y', 'z'); // FALSE
boolean contained3 = StringUtils.containsAny(string, "abc"); // TRUE
boolean contained4 = StringUtils.containsAny(string, "xyz"); // FALSE

containsIgnoreCase

containsIgnoreCase() kiểm tra một string có chứa một substring khác hay không mà không phân biệt ký tự hoa, thường.

String string = "shareprogramming.net";
boolean contained = StringUtils.containsIgnoreCase(string, "SHAREPROGRAMMING");

countMatches

countMatches() method đếm số lần xuất hiện của 1 character hoặc một subtring trong một string cho trước.

String string = "welcome to https://shareprogramming.net//";
int charNum = StringUtils.countMatches(string, 'h'); // 2
int charNum2 = StringUtils.countMatches(string, 'H'); // 0
int stringNum = StringUtils.countMatches(string, "com"); // 1

Appending and Prepending Method

appendIfMissing() method sẽ thêm chuỗi suffix vào cuối một chuỗi cho trước nếu nó thiếu suffix ở cuối chuỗi. Tương tự, nhưng appendIfMissingIgnoreCase() không phân biệt ký tự hoa thường.

String stringWithSuffix = StringUtils.appendIfMissing("shareprogramming", ".net"); // shareprogramming.net
String stringWithSuffixIgnore = StringUtils.appendIfMissingIgnoreCase("shareprogramming.net", ".NET"); // shareprogramming.net

Tương tự prependIfMissing() prependIfMissingIgnoreCase() sẽ thêm chuỗi prefix và đầu chuỗi cho trước nếu nó thiếu chuỗi prefix ở đầu chuỗi.

String stringWithPrefix = StringUtils.prependIfMissing("shareprogramming", "https://"); // https://shareprogramming.net/
String stringWithPrefixIgnoreCase = StringUtils.prependIfMissingIgnoreCase("https://shareprogramming", "HTTPS:/"); // https://shareprogramming.net/

reverse && reverseDelimited

StringUtils class cung cấp 2 method reverse() reverseDelimited() dùng để đảo ngược hoàn toàn hoặc đảo chuỗi theo ký tự ngăn cách.

String originalString = "https://shareprogramming.net//";
String reversedString = StringUtils.reverse(originalString); // /ten.gnimmargorperahs//:sptth

Lưu ý: reverseDelimited(String str, character separatorChar) sẽ ngừng đảo ngược chuỗi cho đến khi gặp được ký tự separatorChar xuất hiện cuối cùng tính từ cuối chuỗi.

String originalString = "https://shareprogramming.net//";
String reversedStringDelimited1 = StringUtils.reverseDelimited(originalString, '.'); // net/.https://shareprogramming
String reversedStringDelimited2 = StringUtils.reverseDelimited(originalString, 'n'); // et/ng.nhttps://shareprogrammi

isAllLowerCase & isAllUpperCase

isAllLowerCase(CharSquence str) trả về true khi các ký tự trong chuỗi đều là ký tự thường. Trong khi isAllUpperCase(CharSquence str) trả về true khi các ký tự trong chuỗi đều là ký tự hoa.

boolean isAllLowerCase1 = StringUtils.isAllLowerCase("   "); // FALSE
 
boolean isAllLowerCase2 = StringUtils.isAllLowerCase(" abc "); // FALSE
 
boolean isAllLowerCase3 = StringUtils.isAllLowerCase("abcD"); // FALSE
 
boolean isAllLowerCase4 = StringUtils.isAllLowerCase("abc"); // TRUE


boolean isAllUpperCase1 = StringUtils.isAllUpperCase("   "); // FALSE
 
boolean isAllUpperCase2 = StringUtils.isAllUpperCase(" ABC "); // FALSE
 
boolean isAllUpperCase3 = StringUtils.isAllUpperCase("ABCd"); // FALSE
 
boolean isAllUpperCase4 = StringUtils.isAllUpperCase("ABC"); // TRUE

Character processing

StringUtils cung cấp isAlpha(), isAlphanumeric(), isNumeric() để kiểm tra các đặc thù riêng của 1 chuỗi.

boolean isAlpha = StringUtils.isAlpha("abc"); // TRUE
boolean isAlphanumeric = StringUtils.isAlphanumeric( "1ab"); // TRUE
boolean isNumeric = StringUtils.isNumeric("123"); // TRUE

Tóm lược

StringUtils là một trong những class mình hay sử dụng để thao tác nhanh với String. Theo kinh nghiệm cá nhân mình thấy hầu hết các yêu cầu của mình đều đáp được StringUtils đáp ứng mà không cần phải viết thêm function để xử lý. Code vừa ngắn gọn vừa dễ hiểu, đọc đến tên method thôi là biết nó làm gì rồi đúng không nào!

Nguồn tham khảo

https://www.baeldung.com/string-processing-commons-lang

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x