Giới thiệu về Apache Commons Text

1. Khái quát chung

Nói một cách đơn giản, thư viện Apache Commons Text chứa một số phương thức tiện ích hữu ích để làm việc với Strings , ngoài những gì Java cốt lõi cung cấp.

Trong phần giới thiệu nhanh này, chúng ta sẽ xem Apache Commons Text là gì, và nó được sử dụng để làm gì, cũng như một số ví dụ thực tế về việc sử dụng thư viện.

2. Sự phụ thuộc của Maven

Hãy bắt đầu bằng cách thêm phần phụ thuộc Maven sau vào pom.xml của chúng tôi :

 org.apache.commons commons-text 1.1 

Bạn có thể tìm phiên bản mới nhất của thư viện tại Maven Central Repository.

3. Tổng quan

Gói gốc org.apache.commons.text được chia thành các gói con khác nhau:

  • org.apache.commons.text.diff - khác nhau giữa các chuỗi
  • org.apache.commons.text.similarity - điểm tương đồng và khoảng cách giữa các chuỗi
  • org.apache.commons.text.translate - dịch văn bản

Hãy xem mỗi gói có thể được sử dụng để làm gì - chi tiết hơn.

3. Xử lý văn bản

Các org.apache.commons.text gói chứa nhiều công cụ để làm việc với Strings.

Ví dụ: WordUtils có các API có khả năng viết hoa chữ cái đầu tiên của mỗi từ trong một Chuỗi, hoán đổi trường hợp của một Chuỗi và kiểm tra xem một Chuỗi có chứa tất cả các từ trong một mảng nhất định hay không.

Hãy xem cách chúng ta có thể viết hoa chữ cái đầu tiên của mỗi từ trong một Chuỗi:

@Test public void whenCapitalized_thenCorrect() { String toBeCapitalized = "to be capitalized!"; String result = WordUtils.capitalize(toBeCapitalized); assertEquals("To Be Capitalized!", result); }

Đây là cách chúng ta có thể kiểm tra xem một chuỗi có chứa tất cả các từ trong một mảng hay không:

@Test public void whenContainsWords_thenCorrect() { boolean containsWords = WordUtils .containsAllWords("String to search", "to", "search"); assertTrue(containsWords); }

StrSubstitutor cung cấp một cách thuận tiện để xây dựng Chuỗi từ các mẫu:

@Test public void whenSubstituted_thenCorrect() { Map substitutes = new HashMap(); substitutes.put("name", "John"); substitutes.put("college", "University of Stanford"); String templateString = "My name is ${name} and I am a student at the ${college}."; StrSubstitutor sub = new StrSubstitutor(substitutes); String result = sub.replace(templateString); assertEquals("My name is John and I am a student at the University of Stanford.", result); }

StrBuilder là một thay thế cho Java.lang.StringBuilder . Nó cung cấp một số tính năng mới không được cung cấp bởi StringBuilder .

Ví dụ, chúng ta có thể thay thế tất cả các lần xuất hiện của một Chuỗi trong một Chuỗi khác hoặc xóa một Chuỗi mà không cần gán một đối tượng mới cho tham chiếu của nó.

Dưới đây là một ví dụ nhanh để thay thế một phần của Chuỗi:

@Test public void whenReplaced_thenCorrect() { StrBuilder strBuilder = new StrBuilder("example StrBuilder!"); strBuilder.replaceAll("example", "new"); assertEquals(new StrBuilder("new StrBuilder!"), strBuilder); }

Để xóa một chuỗi, chúng ta có thể đơn giản làm điều đó bằng cách gọi phương thức clear () trên trình tạo:

strBuilder.clear();

4. Tính toán sự khác biệt giữa các chuỗi

Gói org.apache.commons.text.diff triển khai thuật toán Myers để tính toán chênh lệch giữa hai Chuỗi.

Sự khác biệt giữa hai Chuỗi được xác định bởi một chuỗi các sửa đổi có thể chuyển đổi một Chuỗi này sang một Chuỗi khác.

Có ba loại lệnh có thể được sử dụng để chuyển đổi một chuỗi sang một chuỗi khác - InsertCommand , KeepCommandDeleteCommand .

Một EditScript đối tượng nắm giữ kịch bản đó phải được chạy để chuyển đổi một chuỗi khác. Hãy tính toán số lượng sửa đổi ký tự đơn cần thực hiện để chuyển đổi một Chuỗi thành một chuỗi khác:

@Test public void whenEditScript_thenCorrect() { StringsComparator cmp = new StringsComparator("ABCFGH", "BCDEFG"); EditScript script = cmp.getScript(); int mod = script.getModifications(); assertEquals(4, mod); }

5. Điểm tương đồng và khoảng cách giữa các chuỗi

Các org.apache.commons.text.similarity gói chứa các thuật toán hữu ích cho việc tìm kiếm điểm tương đồng và khoảng cách giữa Strings.

Ví dụ: LongestCommonSubsequence có thể được sử dụng để tìm số ký tự chung trong hai Chuỗi :

@Test public void whenCompare_thenCorrect() { LongestCommonSubsequence lcs = new LongestCommonSubsequence(); int countLcs = lcs.apply("New York", "New Hampshire"); assertEquals(5, countLcs); }

Tương tự, LongestCommonSubsequenceDistance có thể được sử dụng để tìm số lượng các ký tự khác nhau trong hai Chuỗi :

@Test public void whenCalculateDistance_thenCorrect() { LongestCommonSubsequenceDistance lcsd = new LongestCommonSubsequenceDistance(); int countLcsd = lcsd.apply("New York", "New Hampshire"); assertEquals(11, countLcsd); }

6. Dịch văn bản

Các org.apache.text.translate gói ban đầu được tạo ra để cho phép chúng ta tùy chỉnh các quy tắc được cung cấp bởi StringEscapeUtils .

Gói có một tập hợp các lớp chịu trách nhiệm dịch văn bản sang một số mô hình mã hóa ký tự khác nhau như Unicode và Tham chiếu ký tự số. Chúng tôi cũng có thể tạo các quy trình dịch thuật tùy chỉnh của riêng mình.

Hãy xem cách chúng ta có thể chuyển đổi một Chuỗi thành văn bản Unicode tương đương của nó:

@Test public void whenTranslate_thenCorrect() { UnicodeEscaper ue = UnicodeEscaper.above(0); String result = ue.translate("ABCD"); assertEquals("\\u0041\\u0042\\u0043\\u0044", result); }

Ở đây, chúng tôi đang chuyển chỉ mục của ký tự mà chúng tôi muốn bắt đầu dịch từ phương thức trên () .

LookupTranslator cho phép chúng tôi xác định bảng tra cứu của riêng mình trong đó mỗi ký tự có thể có một giá trị tương ứng và chúng tôi có thể dịch bất kỳ văn bản nào sang tương đương với nó.

7. Kết luận

Trong hướng dẫn nhanh này, chúng ta đã thấy tổng quan về Apache Commons Text là gì và một số tính năng phổ biến của nó.

Bạn có thể tìm thấy các mẫu mã trên GitHub.