2012-03-01 67 views
17

Làm cách nào để nhận nội dung sau dấu phẩy cuối cùng trong chuỗi bằng cụm từ thông dụng?Làm cách nào để lấy chuỗi sau dấu phẩy cuối cùng trong java?

Ví dụ:

abcd,fg;ijkl, cas 

Sản lượng nên cas


Lưu ý: Có một khoảng trống giữa dấu phẩy cuối cùng và 'c' nhân vật đó cũng cần phải được loại bỏ. Ngoài ra mẫu chỉ chứa một dấu cách sau dấu phẩy cuối cùng.

Trả lời

36

Sử dụng biểu thức thông thường:

Pattern p = Pattern.compile(".*,\\s*(.*)"); 
Matcher m = p.matcher("abcd,fg;ijkl, cas"); 

if (m.find()) 
    System.out.println(m.group(1)); 

Đầu ra:

cas 

Hoặc bạn có thể sử dụng đơn giản String phương pháp:

  1. System.out.println(s.substring(s.lastIndexOf(",") + 1).trim());
  2. System.out.println(s.substring(s.lastIndexOf(", ") + 2));
+0

Đúng, nhưng không sử dụng regex. –

+0

Đã thêm ví dụ biểu thức chính quy! – dacwe

+0

@dacwe: giống như chỉ mục cuối cùng, cách lấy chỉ mục đầu tiên ?? – Deepzz

9

Có lẽ cái gì đó như:

String s = "abcd,fg;ijkl, cas"; 
String result = s.substring(s.lastIndexOf(',') + 1).trim(); 

Đó là, tôi lấy chuỗi con xuất hiện sau dấu phẩy cuối cùng và loại bỏ xung quanh khoảng trắng sau đó ...

+2

Hãy nhớ trường hợp của bạn! chuỗi con thay vì subString – spassvogel

1

Bạn có thể thử này:

public static void main(String[] args) { 
    String s = " abcd,fg;ijkl, cas"; 
    String[] words = s.split(","); 
    System.out.println(words[words.length-1].trim()); 
} 
+0

Sử dụng 'split' cho tìm kiếm đơn giản này không phải là tối ưu. Bạn có thể sử dụng 'lastIndexOf'. –

1

Chỉ một không gian:

String[] aux = theInputString.split(",\\s"); 
string result = aux[aux.length-1]; 

0 đến n gian:

String[] aux = theInputString.split(",\\s*"); 
string result = aux[aux.length-1]; 
-1
str.split(","); 

sau đó

str.trim() 
0

gì về những điều sau:

String a = "abcd,fg;ijkl, cas"; 
String[] result = a.split(",[ ]*"); 
String expectedResult = result[result.length - 1]); 
+0

Tôi không biết nơi bạn tìm thấy sự khôn ngoan của mình, nhưng dựa trên JavaDocs (http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#split%28java. lang.String% 29) và dựa trên đơn vị của tôi Thử nghiệm nó sử dụng các biểu thức chính quy !. – khmarbaise

0

và một nhiều hơn :)

String s = "abcd,fg;ijkl, cas"; 
String result = s.replaceAll(".*, ", ""); 
2

Bạn nên luôn luôn nhìn cho câu trả lời cho loại câu hỏi trong Apache Commons ... và những cái cơ bản nên được bao gồm trong mỗi xây dựng. Cách thích hợp nhất (không sử dụng regex) là:

StringUtils.substringAfterLast(String str, String separator) 

Nhưng nếu bạn thực sự muốn sử dụng regex vì lý do nào đó, có một số phương pháp bạn có thể muốn sử dụng, ví dụ:

String removeAll(String text, String regex) 

hoặc

String removeFirst(String text, String regex) 

amusingly, bạn có thể có được những gì bạn muốn bằng cách làm điều này (dựa vào quantifiers tham lam):

StringUtils.removeFirst(myString, ".*,"); 

StringUtils là một phần của apache commons-lang3.

Ngoài bất cứ điều gì khác, không có điểm phát minh lại bánh xe. Nhưng tôi có thể nghĩ đến ít nhất 2 lợi thế khác:

  1. Người Apache cũng có thể được tính để dự đoán nhiều nhất là "gotchas" trong những năm qua. Điều này khiến bạn tiếp tục với, um, nội dung thú vị.
  2. các phương pháp Apache này thường được đặt tên tốt: bạn không phải làm lộn xộn mã của bạn bằng các phương thức tiện ích cứng nhắc; thay vào đó bạn có một phương pháp sạch đẹp mà làm những gì nó nói trên thiếc ...

PS không có gì để ngăn cản bạn nhìn vào mã nguồn để kiểm tra về những gì phương pháp này thực sự làm là. Thông thường chúng rất dễ hiểu.

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