2010-04-28 25 views
33

Tôi muốn thay thế tất cả các ký tự khoảng trắng trong chuỗi bằng dấu "+" và tất cả "ß" bằng "ss" ... nó hoạt động tốt cho " ß", nhưng bằng cách nào đó che khuất sẽ không cho phép tôi sử dụng \ s cho một khoảng trắng .. tôi cố gắng '\ t' thay vào đó, nhưng nó không hoạt động hoặc .. tôi nhận được lỗi sau:Java không hoạt động với regex s, nói: chuỗi thoát không hợp lệ

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \)

này là mã của tôi:

try { 
    String temp1 = from.getText().toString(); 
    start_from = temp1.replaceAll("ß", "ss"); 
    start_from = start_from.replaceAll("\s", "+"); 
} 

tại sao nó không hoạt động? nó là một vấn đề với android, eclipse hay gì?

cảm ơn trước!

+1

Tôi rất ngạc nhiên khi bạn thậm chí có thể biên dịch \ s bằng chuỗi ký tự. Thêm \ t vào một chuỗi ký tự sẽ tạo ra một biểu thức chính quy có chứa một ký tự tab, thay vì biểu thức chính quy với \ t trong đó, cho rằng bạn cần \\ t trong chuỗi ký tự. – Geoff

+0

Tôi không thể biên dịch nó, .. eclipse đã cho tôi thông báo lỗi này tôi đã đăng. Tôi chỉ muốn cho bạn biết những gì tôi đã cố gắng để làm. – MJB

Trả lời

53

Bạn cần phải thoát khỏi dấu gạch chéo

start_from = start_from.replaceAll("\\s", "+"); 
+3

cảm ơn bạn! trang web tuyệt vời! :-) "Bạn không thể chấp nhận câu trả lời trong 11 phút" .... ;-) – MJB

9

Vấn đề là \ là một nhân vật chạy thoát trong java cũng như mẫu regex. Nếu bạn muốn kết hợp các mô hình regex \n, nói, và bạn muốn đi trước và viết

replaceAll("\n", "+"); 

Các mô hình regex sẽ không kết thúc được \n: nó sẽ en lên trở thành một newline thực tế, vì đó là những gì "\n" có nghĩa là trong Java. Nếu bạn muốn mẫu để chứa dấu gạch chéo ngược, bạn sẽ cần đảm bảo bạn thoát khỏi dấu gạch chéo ngược đó, để nó không được coi là ký tự đặc biệt trong chuỗi.

replaceAll("\\s", "+"); 
+0

cảm ơn bạn! :-) – MJB

1

Bạn có thể sử dụng lớp java.util.regex.Pattern và sử dụng thứ gì đó như p = Pattern.compile("\s"); kết hợp với p.matcher(start_from).replaceAll("+"). Ngoài ra, chỉ cần thoát khỏi metacharacter "\ s" của bạn là "\\ s".

+0

jepp Tôi đã sử dụng một mẫu trong một phần khác của mã của tôi, tuy nhiên, tôi nghĩ rằng sẽ dễ dàng hơn trong trường hợp này để chỉ sử dụng replaceAll (..) cảm ơn bạn! – MJB

+0

'Pattern.compile (" \ s ")' vẫn là lỗi cú pháp Java. –

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