Loại bỏ một phần của chuỗi trong Java


81

Tôi muốn xóa một phần của chuỗi khỏi một ký tự, đó là:

Chuỗi nguồn:

manchester united (with nice players)

Chuỗi mục tiêu:

manchester united

5
Làm thế nào để bạn biết phần nào nên giữ và phần nào bỏ đi? Không biết điều đó thì không thể trả lời được câu hỏi của bạn?
Raedwald,

Câu trả lời:


156

Có nhiều cách để làm điều đó. Nếu bạn có chuỗi mà bạn muốn thay thế, bạn có thể sử dụng replacehoặc replaceAllcác phương thức của Stringlớp. Nếu bạn đang tìm cách thay thế một chuỗi con, bạn có thể lấy chuỗi con bằng cách sử dụng substringAPI.

Ví dụ

String str = "manchester united (with nice players)";
System.out.println(str.replace("(with nice players)", ""));
int index = str.indexOf("(");
System.out.println(str.substring(0, index));

Để thay thế nội dung trong "()", bạn có thể sử dụng:

int startIndex = str.indexOf("(");
int endIndex = str.indexOf(")");
String replacement = "I AM JUST A REPLACEMENT";
String toBeReplaced = str.substring(startIndex + 1, endIndex);
System.out.println(str.replace(toBeReplaced, replacement));

một số lỗi đánh máy. nên đượcString toBeReplaced = str.substring(startIndex , endIndex + 1);
Yeung

cũng sẽ đáng để loại bỏ khoảng trống: System.out.println (str.replace ("(với những người chơi tốt)", ""));
kiedysktos

32

Thay thế chuỗi

String s = "manchester united (with nice players)";
s = s.replace(" (with nice players)", "");

Biên tập:

Theo chỉ mục

s = s.substring(0, s.indexOf("(") - 1);

3
đừng quêns = s.replace(...)
Sergey Kalinichenko

Nó không thể được, bởi vì những gì trong ngoặc đơn có thể thay đổi. Tôi cần phải thay đổi chuỗi từ các ký tự (
zmki

19

Sử dụng String.Replace ():

http://www.daniweb.com/software-development/java/threads/73139

Thí dụ:

String original = "manchester united (with nice players)";
String newString = original.replace(" (with nice players)","");

Tôi không phải là downvoter nhưng có lẽ do bạn đặt Replace không đúng trường hợp?
Mike Kwan

1
Được ủng hộ để phủ nhận tác động của một cuộc bỏ phiếu từ chối (tức là không giải thích được và rõ ràng là suy đoán).
Gayot Fow

Không nhất thiết chuỗi sẽ giống như ví dụ đã cho. Vì vậy, bạn không thể sử dụng thay thế.
Nhầm lẫn

Có so sánh hiệu suất ở đây, phương thức thay thế chuỗi sử dụng biểu thức chính quy bên dưới. stackoverflow.com/questions/16228992/…
Igor Vuković


7

Sử dụng StringBuilder , bạn có thể thay thế theo cách sau.

StringBuilder str = new StringBuilder("manchester united (with nice players)");
int startIdx = str.indexOf("(");
int endIdx = str.indexOf(")");
str.replace(++startIdx, endIdx, "");

6

Lúc đầu, tôi sẽ chia chuỗi ban đầu thành một mảng Chuỗi với mã thông báo "(" và Chuỗi ở vị trí 0 của mảng đầu ra là những gì bạn muốn có.

String[] output = originalString.split(" (");

String result = output[0];

5

Bạn nên sử dụng phương thức substring () của đối tượng String.

Đây là một mã ví dụ:

Giả định: Tôi giả sử ở đây rằng bạn muốn truy xuất chuỗi cho đến dấu ngoặc đơn đầu tiên

String strTest = "manchester united(with nice players)";
/*Get the substring from the original string, with starting index 0, and ending index as position of th first parenthesis - 1 */
String strSub = strTest.subString(0,strTest.getIndex("(")-1);

2

Sử dụng StringUtils từ commons lang

Chuỗi nguồn null sẽ trả về null. Chuỗi nguồn trống ("") sẽ trả về chuỗi trống. Chuỗi loại bỏ null sẽ trả về chuỗi nguồn. Một chuỗi loại bỏ rỗng ("") sẽ trả về chuỗi nguồn.

String str = StringUtils.remove("Test remove", "remove");
System.out.println(str);
//result will be "Test"

1
// Java program to remove a substring from a string
public class RemoveSubString {

    public static void main(String[] args) {
        String master = "1,2,3,4,5";
        String to_remove="3,";

        String new_string = master.replace(to_remove, "");
        // the above line replaces the t_remove string with blank string in master

        System.out.println(master);
        System.out.println(new_string);

    }
}

1

Nếu bạn chỉ cần xóa mọi thứ sau dấu "(", hãy thử điều này. Không có gì nếu không có dấu ngoặc đơn.

StringUtils.substringBefore(str, "(");

Nếu có thể có nội dung sau dấu ngoặc đơn, hãy thử điều này.

String toRemove = StringUtils.substringBetween(str, "(", ")");
String result = StringUtils.remove(str, "(" + toRemove + ")"); 

Để xóa khoảng trắng kết thúc, hãy sử dụng str.trim()

Các hàm Apache StringUtils là null-, rỗng- và không khớp- an toàn


Giải pháp tốt!!
Sumit Shukla

0

Bạn có thể sử dụng replaceđể sửa chuỗi của mình. Phần sau sẽ trả về mọi thứ trước dấu "(" và cũng loại bỏ tất cả các khoảng trắng ở đầu và cuối. Nếu chuỗi bắt đầu bằng dấu "(" thì chuỗi sẽ giữ nguyên.

str = "manchester united (with nice players)"
matched = str.match(/.*(?=\()/)
str.replace(matched[0].strip) if matched

Điều này dường như không hoạt động trong Java. Nó có thể là phái sinh của ECMAscript. Bạn có phương pháp nào đó để làm cho mã này hoạt động như trong Java không?
1111161171159459134

0

Giải pháp Kotlin

Nếu bạn đang xóa một chuỗi cụ thể khỏi phần cuối, hãy sử dụng removeSuffix ( Tài liệu )

var text = "one(two"
text = text.removeSuffix("(two") // "one"

Nếu hậu tố không tồn tại trong chuỗi, nó chỉ trả về gốc

var text = "one(three"
text = text.removeSuffix("(two") // "one(three"

Nếu bạn muốn xóa sau một ký tự, hãy sử dụng

// Each results in "one"

text = text.replaceAfter("(", "").dropLast(1) // You should check char is present before `dropLast`
// or
text = text.removeRange(text.indexOf("("), text.length)
// or
text = text.replaceRange(text.indexOf("("), text.length, "")

Bạn cũng có thể kiểm tra removePrefix, removeRange, removeSurrounding, và replaceAfterLastđó cũng tương tự như

Danh sách đầy đủ ở đây: ( Tài liệu )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.