2012-05-08 13 views

Trả lời

3

Hãy thử mã này:

s = s.replaceAll("PACKAGE\\s*NFY", "PACKAGE NFY"); 
+1

+0 Điều này không được tổng quát, đủ để giúp người khác. –

0

Bạn đã thử một chức năng thay thế? Một cái gì đó trong dòng:

youString.Replace("\r", "") 
-1
string = string.replace(/\s{2,}/g, ' '); 
+1

Thôi nào, câu hỏi được gắn thẻ 'java'. Bạn không thể đưa ra một giải pháp trong 'Java'? – Romain

+0

Rất tiếc !!! Hey nhưng bạn vẫn có thể sử dụng mô hình mather và thay thế chuỗi. –

23

Java String.replaceAll trên thực tế có một biểu thức chính quy. Bạn có thể loại bỏ tất cả các dòng mới với:

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

Nhưng điều này sẽ loại bỏ tất cả dòng mới.

Lưu ý đôi \ 's: để chuỗi được chuyển đến trình phân tích cụm từ thông dụng là \n.

Bạn cũng có thể làm được điều này, đó là thông minh hơn:

s = s.replaceAll("\\s{2,}", " "); 

Điều này sẽ loại bỏ tất cả các chuỗi của 2 hoặc nhiều khoảng trắng, thay thế chúng bằng một không gian duy nhất. Vì các dòng mới cũng là khoảng trống, nên thực hiện thủ thuật cho bạn.

+4

Ngoài ra, 's.replaceAll (" (?: \\ n | \\ r) "," ");' đạt được điều tương tự trong một câu lệnh đơn. Và người ta có thể điều chỉnh biểu thức để chọn lọc hơn. – Romain

+0

Bạn có thể * luôn * khớp với văn bản có dòng mới trong đó; bạn không cần một lá cờ cho điều đó. Những gì MULTILINE làm là thay đổi ý nghĩa của các neo, '^' và '$', cho phép chúng khớp với nhau ở các ranh giới dòng cũng như đầu và cuối của toàn bộ chuỗi. Vì không có neo trong regex của bạn, cờ MULTILINE không có hiệu lực. –

+0

Bạn nói đúng - chỉ cần thử bằng 'Pattern.MULTILINE' đã nhận xét. Nhưng (những gì tôi đã thử ban đầu) 's = s.replace (" \\ s {2,} "," ");' không hoạt động. Nó không loại bỏ các dòng mới. Bất kỳ ý tưởng tại sao? – craigmj

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