2009-03-04 33 views

Trả lời

74

Bạn cần thoát khỏi biểu tượng chính quy, sử dụng \.

Tuy nhiên, Java sử dụng tham số Chuỗi để xây dựng cụm từ thông dụng, sử dụng \ cho chuỗi thoát riêng của nó. Vì vậy, bạn phải thoát khỏi \ bản thân:

"\\+" 
+1

Tôi có thói quen xấu khi sử dụng '/' khi xây dựng regex và sau đó chạy .replace ('/', '\\'), để tôi không phải nhập "\\\\" để đối sánh với dấu gạch chéo ngược. –

+2

Nếu bạn muốn thay thế một chuỗi cố định, Pattern.quote (String) là một người bạn rất tốt. – gustafc

13

Bạn sẽ cần thoát khỏi dấu + bằng \ và bởi vì \ chính nó là một ký tự đặc biệt trong chuỗi Java, bạn sẽ cần phải thoát khỏi ký tự đó bằng \.

Vì vậy, chuỗi regex của bạn sẽ được định nghĩa là "\\ +" trong mã Java.

I.e. ví dụ này:

String test = "ABCD+EFGH"; 
test = test.replaceAll("\\+", "-"); 
System.out.println(test); 
29

khi nghi ngờ, chúng ta hãy java làm việc cho bạn:

myStr.replaceAll(Pattern.quote("+"), replaceStr); 
+0

Đó là một kỹ thuật tốt - cảm ơn. –

+0

không đủ. replaceStr cũng cần phải được trích dẫn cho các công cụ thay thế. tại sao không chỉ sử dụng 'myStr.thay thế ("+", replaceStr) ' – user102008

+0

Tại sao replaceStr phải được trích dẫn? String.replace() không thay thế tất cả các lần xuất hiện. – FelixM

3

Nếu bạn muốn có một chuỗi đơn giản tìm và thay thế (tức là bạn don 't cần regex), nó có thể là đơn giản để sử dụng StringUtils from Apache Commons, mà sẽ cho phép bạn viết:

mystr = StringUtils.replace(mystr, "+", "plus"); 
+0

thx để trỏ đến điều này. đã giúp tôi nhớ sử dụng giải pháp phi regex này trong các trường hợp đơn giản. –

+1

không phải là tương đương với việc sử dụng mystr.replace ("+", "cộng")? thay thế không sử dụng regex (trong khi replaceAll làm). – Vinze

1

những người khác đã nói đúng phương pháp:

  1. Thoát khỏi + như \\+
  2. Sử dụng phương pháp Pattern.quote mà thoát tất cả các meta-nhân vật regex.

Một phương pháp khác mà bạn có thể sử dụng là đặt + vào một lớp nhân vật. Nhiều ký tự meta regex (., *, + trong số nhiều đối tượng khác) được xử lý theo nghĩa đen trong lớp ký tự.

Vì vậy, bạn cũng có thể làm:

orgStr.replaceAll("[+]",replaceStr); 

Ideone Link

2

Giả sử bạn muốn thay thế - với \\\-, sử dụng:

text.replaceAll("-", "\\\\\\\\-"); 
1
String str="Hello+Hello"; 
str=str.replaceAll("\\+","-"); 
System.out.println(str); 

HOẶC

String str="Hello+Hello"; 
str=str.replace(Pattern.quote(str),"_"); 
System.out.println(str); 
+1

Chẳng phải ví dụ thứ hai là 'Pattern.quote (" + ")' và không phải là 'Pattern.quote (str)'? –

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