2012-01-13 47 views
43

Tôi đã làm việc trong thông điệp SOAP để lấy LoginToken từ Webservice và lưu trữ LoginToken trong chuỗi và sử dụng System.out.println(LoginToken); để in. Điều này in [wdsd34svdf], nhưng tôi chỉ muốn wdsd34svdf như vậy, làm thế nào để loại bỏ khung vuông. xin vui lòng bất kỳ ai giúp tôi.Làm cách nào để xóa ký tự đầu tiên và cuối cùng của chuỗi?

Cảm ơn

Ví dụ:

String LoginToken=getName().toString(); 
System.out.println("LoginToken" + LoginToken); 

Output: [wdsd34svdf] Tôi muốn wdsd34svdf

+5

câu hỏi này cho thấy hoàn toàn không có nỗ lực nghiên cứu –

+2

Đúng vậy, nhưng bây giờ có thêm một copy-paste câu trả lời cho những lập trình viên lười biếng hỏi google những thứ như thế :) – tom

Trả lời

110

Thật dễ dàng, Bạn cần để tìm chỉ mục của [an d] rồi đến chuỗi con. (Ở đây [luôn luôn là lúc khởi động và] là ở cuối),

String loginToken="[wdsd34svdf]"; 
System.out.println(loginToken.substring(1, loginToken.length()-1)); 
+0

cảm ơn bạn rất nhiều –

+0

Tôi thích rằng bạn bắt đầu câu của bạn với: "Dễ dàng" ... :) Tôi đoán mọi thứ đều dễ dàng khi bạn biết nó .. đã giúp tôi –

+6

Điều này phải là loginToken.length() - 2 để xóa khung kết thúc. – mga911

11

Bạn luôn có thể sử dụng substring:

String loginToken = getName().toString(); 
loginToken = loginToken.substring(1, loginToken.length() - 1); 
3

Tôi đã có một kịch bản tương tự, và tôi nghĩ rằng một cái gì đó giống như

str.replaceAll("\[|\]", ""); 

trông sạch hơn. Tất nhiên, nếu mã thông báo của bạn có thể có dấu ngoặc trong đó, điều đó sẽ không hoạt động.

+1

xin lưu ý rằng chỉ có replaceAll() và replaceFirst() hỗ trợ regex, vì vậy ở đây str.replaceAll ("\\\ [| \\\]", ""); sẽ hoạt động – rekinyz

+0

@ user1146450 tất nhiên, xin lỗi! – V9801

+1

Biểu thức chính xác giống như str = str.replaceAll ("\\ [| \\]", ""); xem thiếu \\ trong biểu thức của bạn – Raj

7

Một giải pháp khác cho vấn đề này là sử dụng phương thức commons-lang (kể từ phiên bản 2.0) StringUtils.substringBetween(String str, String open, String close). Chính lợi thế là nó hoạt động an toàn null.

StringUtils.substringBetween("[wdsd34svdf]", "[", "]"); // returns wdsd34svdf

+2

Điều này sẽ làm việc cho trường hợp cụ thể đó, nhưng sẽ trả về "wdsd" nếu "[wdsd] 34svdf]" được chuyển làm tham số đầu tiên. – izilotti

10

Đây là giải pháp chung:

str.replaceAll("^.|.$", "") 
0

Bằng cách này bạn có thể xóa 1 hàng đầu "[" và 1 dấu "]" nhân vật. Nếu chuỗi của bạn xảy ra để không bắt đầu với "[" hoặc kết thúc với "]" nó sẽ không loại bỏ bất cứ điều gì:

str.replaceAll("^\\[|\\]$", "") 
+0

Bạn đã thử nghiệm điều đó chưa? Tôi có thể sai, nhưng nó trông giống như "bắt đầu chuỗi, sau đó hoặc [hoặc] sau đó kết thúc chuỗi". Chúng ta không cần dấu ngoặc ở đây sao? – YakovL

+1

Yeah, nó hoạt động hoàn toàn tốt đẹp: \t @Test \t public void testReplace() { \t \t String str = "[wdsd34svdf]"; \t \t str = str.replaceAll ("^ \\ [| \\] $", ""); \t \t assertTrue (str.equals ("wdsd34svdf")); \t} –

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