Xóa hoặc thay thế một phần của chuỗi trong Java

1. Khái quát chung

Trong hướng dẫn này, chúng ta sẽ xem xét các phương tiện khác nhau mà chúng ta có thể xóa hoặc thay thế một phần của Chuỗi trong Java.

Chúng ta sẽ khám phá cách xóa và / hoặc thay thế một chuỗi con bằng cách sử dụng API chuỗi , sau đó sử dụng API StringBuilder và cuối cùng là sử dụng lớp StringUtils của thư viện Apache Commons.

Như một phần thưởng, chúng tôi cũng sẽ xem xét việc thay thế một chính xác từ sử dụng API String và Apache Commons RegExUtils lớp .

2. API chuỗi

Một trong những phương pháp thay thế chuỗi con đơn giản và dễ hiểu là sử dụng lớp Replace, ReplaceAll hoặc ReplaceFirst of a String.

Phương thức Replace () nhận hai đối số - đích và văn bản thay thế:

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = master.replace(target, replacement); assertTrue(processed.contains(replacement)); assertFalse(processed.contains(target));

Đoạn mã trên sẽ mang lại đầu ra này:

Hello World Java!

Nếu một biểu thức chính quy được yêu cầu trong việc chọn mục tiêu, thì ReplaceAll () hoặc ReplaceFirst () phải là phương thức được lựa chọn. Như tên gọi của chúng, ReplaceAll () sẽ thay thế mọi lần xuất hiện phù hợp, trong khi thay thếFirst () sẽ thay thế lần xuất hiện phù hợp đầu tiên:

String master2 = "Welcome to Baeldung, Hello World Baeldung"; String regexTarget = "(Baeldung)$"; String processed2 = master2.replaceAll(regexTarget, replacement); assertTrue(processed2.endsWith("Java"));

Giá trị của processing2 sẽ là:

Welcome to Baeldung, Hello World Java

Đó là bởi vì regex được cung cấp dưới dạng regexTarget sẽ chỉ khớp với lần xuất hiện cuối cùng của Baeldung. Trong tất cả các ví dụ đưa ra ở trên, chúng ta có thể sử dụng một thay thế trống và nó sẽ loại bỏ một cách hiệu quả một mục tiêu từ một bậc thầy .

3. API StringBuilder

Chúng ta cũng có thể thao tác văn bản trong Java bằng cách sử dụng lớp StringBuilder . Hai phương thức ở đây là delete ()Replace () .

Chúng ta có thể xây dựng một phiên bản của StringBuilder từ một Chuỗi hiện có và sau đó sử dụng các phương pháp được đề cập để thực hiện thao tác với Chuỗi như mong muốn:

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; int startIndex = master.indexOf(target); int stopIndex = startIndex + target.length(); StringBuilder builder = new StringBuilder(master);

Bây giờ chúng ta có thể xóa mục tiêu bằng xóa () :

builder.delete(startIndex, stopIndex); assertFalse(builder.toString().contains(target));

Chúng tôi cũng có thể sử dụng thay thế () để cập nhật trang cái:

builder.replace(startIndex, stopIndex, replacement); assertTrue(builder.toString().contains(replacement));

Một điểm khác biệt rõ ràng giữa việc sử dụng StringBuilderString API là chúng ta phải tự lấy chỉ mục bắt đầu và chỉ số dừng của Chuỗi mục tiêu .

4. Lớp StringUtils

Một phương pháp khác mà chúng tôi sẽ xem xét là thư viện Apache Commons.

Đầu tiên, hãy thêm phụ thuộc bắt buộc vào dự án của chúng tôi:

 org.apache.commons commons-lang3 3.8.1 

Phiên bản mới nhất của thư viện có thể được tìm thấy tại đây.

Lớp StringUtils có các phương thức để thay thế một chuỗi con của một Chuỗi :

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = StringUtils.replace(master, target, replacement); assertTrue(processed.contains(replacement));

Có một biến thể quá tải của thay thế () nhận tham số tối đa là số nguyên , xác định số lần xuất hiện để thay thế. Chúng ta cũng có thể sử dụng ReplaceIgnoreCase () nếu không quan tâm đến độ phân biệt chữ hoa chữ thường :

String master2 = "Hello World Baeldung!"; String target2 = "baeldung"; String processed2 = StringUtils.replaceIgnoreCase(master2, target2, replacement); assertFalse(processed2.contains(target));

5. Thay thế các từ chính xác

Trong ví dụ cuối cùng này, chúng ta sẽ tìm hiểu cách thay thế một từ chính xác bên trong một Chuỗi .

Cách đơn giản để thực hiện thay thế này là sử dụng một biểu thức chính quy với các ranh giới từ.

Biểu thức chính quy ranh giới từ là \ b . Việc bao quanh từ mong muốn bên trong cụm từ thông dụng này sẽ chỉ khớp với các lần xuất hiện chính xác.

Trước tiên, hãy xem cách sử dụng biểu thức chính quy này với API chuỗi:

String sentence = "A car is not the same as a carriage, and some planes can carry cars inside them!"; String regexTarget = "\\bcar\\b"; String exactWordReplaced = sentence.replaceAll(regexTarget, "truck");

Chuỗi chính xácWordReplaced chứa:

"A truck is not the same as a carriage, and some planes can carry cars inside them!"

Chỉ từ chính xác sẽ được thay thế. Lưu ý rằng dấu gạch chéo ngược luôn cần được thoát ra khi làm việc với các biểu thức chính quy trong Java.

Một cách thay thế để thực hiện việc thay thế này là sử dụng lớp RegExUtils từ Thư viện Apache Commons, có thể được thêm vào như một phần phụ thuộc như chúng ta đã thấy trong phần trước:

String regexTarget = "\\bcar\\b"; String exactWordReplaced = RegExUtils.replaceAll(sentence, regexTarget, "truck"); 

Mặc dù cả hai phương pháp sẽ mang lại cùng một kết quả, nhưng việc quyết định phương pháp nào nên được sử dụng sẽ phụ thuộc vào kịch bản cụ thể của chúng tôi.

6. Kết luận

Tóm lại, chúng tôi đã khám phá nhiều cách loại bỏ và thay thế chuỗi con trong Java. Phương pháp tốt nhất để áp dụng phần lớn vẫn phụ thuộc vào tình hình và bối cảnh hiện tại.

Như thường lệ, mã nguồn hoàn chỉnh có sẵn trên Github.