2013-05-22 73 views
40

Giả sử tôi có một String string như thế này:Làm thế nào để thay thế một chuỗi con của một chuỗi

"abcd=0; efgh=1" 

và tôi muốn thay thế "abcd" bởi "dddd". Tôi đã cố gắng thực hiện điều đó:

string.replaceAll("abcd","dddd"); 

Nó không hoạt động. Bất kỳ đề xuất?

EDIT: Cụ thể hơn, tôi đang làm việc trong Java và tôi đang cố gắng phân tích cú pháp tài liệu HTML, cụ thể là nội dung giữa các thẻ <script>. Tôi đã tìm thấy cách phân tích nội dung này thành một chuỗi:

if(tag instanceof ScriptTag){ 
     if(((ScriptTag) tag).getStringText().contains("DataVideo")){ 
      String tagText = ((ScriptTag)tag).getStringText(); 
     } 
} 

Bây giờ tôi phải tìm cách thay thế một chuỗi con bằng chuỗi con khác.

+2

Bạn có thể cụ thể hơn "nó không hoạt động không?" Đầu tiên, ngôn ngữ này là gì? Bạn có mắc lỗi gì không? Có điều gì bất ngờ xảy ra không? Bạn đang cố gắng thực hiện điều gì nói chung? –

Trả lời

4

By regex tôi nghĩ rằng đây là java, phương pháp replaceAll() trả về một String mới với chuỗi con thay thế, vì vậy hãy thử này:

String teste = "abcd=0; efgh=1"; 

String teste2 = teste.replaceAll("abcd", "dddd"); 

System.out.println(teste2); 

Output:

dddd=0; efgh=1 
+0

Thêm một câu trả lời gốc. – HoldOffHunger

0

Trong javascript:

var str = "abcdaaaaaabcdaabbccddabcd"; 
document.write(str.replace(/(abcd)/g,"----")); 
//example output: ----aaaaa----aabbccdd---- 

Trong các ngôn ngữ khác, nó sẽ là một cái gì đó tương tự. Hãy nhớ bật các kết quả toàn cầu.

0

Có thể bạn không chỉ định nó sau khi thực hiện thay thế hoặc thay thế sai. Thử:

String haystack = "abcd=0; efgh=1"; 
String result = haystack.replaceAll("abcd","dddd"); 
57

Bạn cần sử dụng giá trị trả lại của phương pháp replaceAll(). replaceAll() không thay thế các ký tự trong chuỗi hiện tại, nó sẽ trả về một chuỗi mới có thay thế.

  • Đối tượng chuỗi không thay đổi được, giá trị của chúng không thể thay đổi sau khi chúng được tạo.
  • Bạn có thể sử dụng replace() thay vì replaceAll() nếu bạn không cần regex.
String str = "abcd=0; efgh=1"; 
    String replacedStr = str.replaceAll("abcd", "dddd"); 

    System.out.println(str); 
    System.out.println(replacedStr); 

đầu ra

abcd=0; efgh=1 
dddd=0; efgh=1 
+0

Lưu ý rằng replaceAll mong đợi một biểu thức chính quy. Thay thế dấu ngoặc đơn trống, "()", sẽ tạo ra lỗi regex, cho đến khi bạn thoát đúng: str.replaceAll ("\\\ (\\\)", ""); – HoldOffHunger

9

2 điều bạn nên lưu ý:

  1. Strings trong Java là không thay đổi nên bạn cần lưu trữ giá trị trả về của phương thức gọi thereplace trong một Chuỗi.
  2. Bạn không thực sự cần một regex ở đây, chỉ cần một cuộc gọi đơn giản đến String#replace(String) sẽ thực hiện công việc.

Vì vậy, chỉ cần sử dụng mã này:

String replaced = string.replace("abcd", "dddd"); 
8

Bạn cần phải tạo biến để gán giá trị mới cho, như thế này:

String str = string.replaceAll("abcd","dddd"); 
2

Lưu ý rằng những dấu xồ nguợc (\) và đô la dấu ($) trong chuỗi thay thế có thể khiến kết quả khác với kết quả được coi là chuỗi thay thế bằng chữ; xem Matcher.replaceAll. Sử dụng java.util.regex.Matcher.quoteReplacement để ngăn chặn ý nghĩa đặc biệt của các ký tự này, nếu muốn.

từ javadoc.

Các vấn đề liên quan