2015-09-24 17 views
5

Tôi cần phải thay thế một giá trị trong một chuỗi như {Name} bằng các giá trị.
Làm cách nào chúng tôi có thể thay thế ký tự đặc biệt {}?
Tôi đã thử này:Cách thay thế '{Name}' trong java

str.replaceAll("{Name}","A"); 

Nhưng công việc doesnt này nếu chúng ta có ký tự đặc biệt.

+2

cố gắng để scape nhân vật với str.replaceAll ("\\ {Name \\}", "A"); –

Trả lời

12

Theo phương thức JavaDoc, phương pháp .replaceAll(String regex, String replacement) có biểu thức chính quy làm tham số đầu tiên.

Điều đó xảy ra là {} có ý nghĩa đặc biệt trong cú pháp biểu thức chính quy và do đó cần phải được thoát. Thử sử dụng str.replaceAll("\\{Name\\}","A");.

Thêm \ ở phía trước hướng dẫn công cụ biểu thức chính quy đe dọa {} làm ký tự thực (không có ý nghĩa đặc biệt của chúng). Vì đây là Java, bạn cũng cần phải thoát khỏi ký tự \ đó là lý do tại sao bạn cần hai trong số chúng.

+1

'replaceAll' cho thay thế bằng chữ là quá mức cần thiết. –

+0

Mức quá mức nhưng phổ biến, được sao chép từ mã này sang mã khác mà không có bất kỳ sự phản ánh nào –

+0

@npinti: Vòng lặp nào? 'replace' thay thế tất cả các lần xuất hiện, giống như' replaceAll'. –

14

Sử dụng replace thay vì replaceAll, vì replace không mong đợi và phân tích cú pháp cụm từ thông dụng.

Ví dụ: (live copy)

String str = "Here it is: {Name} And again: {Name}"; 
System.out.println("Before: " + str); 
str = str.replace("{Name}","A"); 
System.out.println("After: " + str); 

Output:

 
Before: Here it is: {Name} And again: {Name} 
After: Here it is: A And again: A