2011-08-26 23 views
9

Có một thời gian khó thay thế báo giá bằng dấu trích dẫn thoát. Tôi có một chuỗi có giá trị của 'Foo' thanh "foobar", và tôi đang cố gắng để thay thế các dấu ngoặc kép xung quanh thanh với dấu ngoặc kép thoát, và nó không hoạt động. Tôi phát điên.Chuỗi Java.replaceAll không thay thế báo giá với dấu trích dẫn thoát

s=s.replaceAll("\"","\\\""); 

Tôi hy vọng sẽ có giá trị của 'foo \' bar \ "foobar ', nhưng không. Bất kỳ giúp đỡ?

Trả lời

19

replaceAll sử dụng cụm từ thông dụng - trong đó dấu gạch chéo ngược vừa thoát khỏi ký tự tiếp theo, ngay cả trong thay thế.

Sử dụng replace thay vào đó và nó là tốt ... hoặc bạn có thể tăng gấp đôi dấu chéo ngược trong đối số thứ hai nếu bạn muốn sử dụng mẫu biểu thức chính quy:

String after = before.replaceAll("\"", "\\\\\""); 

Điều này có thể hữu ích nếu bạn cần phải phù hợp với đầu vào bằng cách sử dụng cụm từ thông dụng, nhưng tôi khuyên bạn nên sử dụng biểu mẫu không phải regex trừ khi bạn thực sự cần hành vi regex.

Cá nhân tôi nghĩ rằng nó là một sai lầm cho các phương pháp trong String sử dụng biểu thức thông thường để bắt đầu với - những thứ như foo.split(".") mà sẽ chia trên mỗi nhân vật hơn là trên các giai đoạn, hoàn toàn bất ngờ cho nhà phát triển không thận trọng.

+3

+1, cho môi trường 'chia ("")'. Tôi ghét điều này ... –

9

Sử dụng s = s.replace("\"", "\\\"");, là phiên bản không phải regex.

1
s=s.replaceAll("\"","\\\\\""); 

Nhưng bạn thực sự nên đi theo số replace(...) như những lời khuyên khác ở đây.

1

Sử dụng;

s=s.replaceAll("\"","\\\\\""); 
0

hãy làm theo bên dưới chương trình và sử dụng> s.replace ("/"."//");

public class stringbackslash { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String s="\"; 
     s=s.replace("\", "\\"); 
     System.out.println(s); 

    } 

} 
2

Bạn cần thoát khỏi cả hai thay thế tất cả các đối số vì chúng là regex!

@Test 
public void testReplace() { 
    assertEquals("foo\\\"bar\\\"", 
       "foo\"bar\"".replaceAll("\\\"", "\\\\\\\"")); 
} 

Vì vậy, nếu bạn muốn viết " bạn cần phải thoát khỏi regex ->\" nhưng vì bạn đang ở trong java bạn cần phải thoát khỏi \" cho java, vì vậy bạn có được \\\\". (đó là tham số tìm kiếm).

Đối với các tham số thay thế bạn muốn có \" -> trong regex: \\\" -> trong Java \\\\\\\"

+0

chính xác lời giải thích mà tôi nghĩ đã bị thiếu ở trên! Cảm ơn – Engineiro

1
String str = "'Foo \"Bar\" Bar'"; 
System.out.println(str);   
System.out.println(str.replaceAll("\"", "\\\\\"")); 
Các vấn đề liên quan