2012-03-01 184 views
17

如何使用正則表達式獲取字符串中最後一個逗號後的內容?如何獲取java中最後一個逗號後的字符串?

實施例:

abcd,fg;ijkl, cas 

輸出應該cas


注:有最後一個逗號和'c'字符也需要去除之間的空間。 此模式在最後一個逗號後只包含一個空格。

回答

36

使用正則表達式:

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

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

輸出:

cas 

或者你可以用簡單的方法String

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

這是正確的,但它不使用正則表達式。 – 2012-03-01 11:45:38

+0

添加了正則表達式示例! – dacwe 2012-03-01 11:49:02

+0

@dacwe:像最後一個索引,如何獲得第一個索引? – Deepzz 2012-11-30 12:07:15

9

也許是這樣的:

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

也就是說,我把最後一個逗號後出現的串並去除環境之後的空白......

+2

注意你的情況! substring而不是subString – spassvogel 2014-02-20 00:09:29

1

你可以試試這個:

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

使用'split'進行這個簡單的搜索並不是最優的。你可以使用'lastIndexOf'。 – 2012-03-01 11:57:36

1

只有一個空間:

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

0到n個空格:

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

然後

str.trim() 
0

有關以下內容:

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

我不知道你在哪裏找到了自己的智慧,但是基於JavaDocs(http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#split%28java。 lang.String%29)並基於我的單元測試它使用正則表達式! – khmarbaise 2012-03-01 11:54:56

0

還有一:)

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

你應該總是始終尋找答案對於這類問題在Apache的百科全書......和基本選應包括在每一個版本。最合適的(不使用正則表達式)是這樣的:

StringUtils.substringAfterLast(String str, String separator) 

但如果你真的想使用某種原因,一個正則表達式有幾個你可能要使用的方法,例如

String removeAll(String text, String regex) 

String removeFirst(String text, String regex) 

有趣的是,你可以得到你想要做這個(依靠貪婪量詞)什麼:

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

StringUtils的是阿帕奇公地lang3的一部分。

除了別的以外,沒有重新發明車輪的意思。但我能想到的其他至少2個優點:

  1. Apache的人也可以算的上早已預料到多年來最 「陷阱」。這讓你繼續,嗯, 有趣的東西。
  2. 這些Apache方法通常都有很好的名稱:你不需要用stoopid實用程序方法混淆你的代碼; 而不是你有一個乾淨的方法,做什麼它說的 錫...

PS沒有什麼可以阻止你在看源代碼來檢查什麼方法實際上做。通常他們很容易理解。

相關問題