2012-03-06 35 views
11

Giả sử tôi muốn xóa tất cả " xung quanh một chuỗi. Trong Python, tôi sẽ:Tương đương Java cho str.strip của Python()

>>> s='"Don\'t need the quotes"' 
>>> print s 
"Don't need the quotes" 
>>> print s.strip('"') 
Don't need the quotes 

Và nếu tôi muốn xóa nhiều ký tự, ví dụ: " và dấu ngoặc đơn:

>> s='"(Don\'t need quotes and parens)"' 
>>> print s 
"(Don't need quotes and parens)" 
>>> print s.strip('"()') 
Don't need quotes and parens 

Cách thanh lịch để tách chuỗi trong Java là gì?

+0

Lớp String có phương thức replace(). Nó phải phù hợp với nhu cầu của bạn. – wuppi

+0

[Xem tại đây] (http://stackoverflow.com/a/2088900/593709) là một cuộc thảo luận chi tiết. –

Trả lời

9

Giả sử tôi muốn loại bỏ tất cả " xung quanh một chuỗi

Tương đương gần nhất với mã Python là:

s = s.replaceAll("^\"+", "").replaceAll("\"+$", ""); 

Và nếu tôi muốn loại bỏ nhiều nhân vật, ví dụ " và dấu ngoặc:

s = s.replaceAll("^[\"()]+", "").replaceAll("[\"()]+$", ""); 

Nếu bạn có thể sử dụng Apache Commons Lang, có StringUtils.strip().

+0

+1 Để xử lý nhiều ký tự theo yêu cầu, nó vẫn tạo ra hai chuỗi mới, mặc dù –

+1

@AdamMatan: Tôi nghĩ rằng phương thức ưa thích của Common Lang 'StringUtils.strip()' là phương thức được ưa thích. – NPE

0

này thay thế "() ngay từ đầu và kết thúc của một chuỗi

String str = "\"te\"st\""; 
str = str.replaceAll("^[\"\\(]+|[\"\\)]+$", ""); 
1

Trong java, bạn có thể làm điều đó thích:

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

Ngoài ra nếu bạn chỉ muốn thay thế "Start" và dấu ngoặc kép "Kết thúc", bạn có thể làm điều gì đó như:

s = s.replace("^'", "").replace("'$", "").replace("^\"", "").replace("\"$", ""); 

HOẶC nếu chỉ cần đặt:

s = s.replaceAll("^\"|\"$", "").replaceAll("^'|'$", ""); 
+0

nó đã sửa đổi câu trả lời của tôi cho phù hợp .. !! –

+0

Nó sẽ không phải là một sự lãng phí thời gian, tạo ra hai dây mới thay vì một? –

+0

Lưu ý rằng các chuỗi là "không thay đổi", do đó không đủ để chỉ đơn giản là làm '' 's.replace ("\" "," ")' ''. Bạn phải gán lại biến 's' cho chuỗi kết quả ' –

0

thử điều này:

new String newS = s.replaceAll("\"", ""); 

thay thế double-quote với một String không có ký tự.

6

Thư viện Guava có tiện ích tiện dụng cho nó. Thư viện có chứa CharMatcher.trimFrom(), những gì bạn muốn. Bạn chỉ cần tạo một số CharMatcher khớp với các ký tự bạn muốn xóa.

Code:

CharMatcher matcher = CharMatcher.is('"'); 
System.out.println(matcher.trimFrom(s)); 

CharMatcher matcher2 = CharMatcher.anyOf("\"()"); 
System.out.println(matcher2.trimFrom(s)); 

Bên trong, điều này không tạo ra bất kỳ new String, nhưng chỉ cần gọi s.subSequence(). Vì nó cũng không cần Regexps, tôi đoán nó là giải pháp nhanh nhất (và chắc chắn là giải pháp sạch nhất và dễ hiểu nhất).

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