2016-01-25 74 views
1

我有一個這樣的字符串。避免使用多個拆分方法

//Locaton;RowIndex;maxRows=New York, NY_10007;1;4 

從這我需要得到的只是紐約州的名字。 如何在單步代碼中實現。

我用..

String str = "Locaton;RowIndex;maxRows=New York, NY_10007;1;4 "; 
    str = str.split("=")[1]; 
    str = str.split(",")[0] 

上述代碼contails大量splits.How的CAN I避免thiis。 我只想使用單個代碼來獲取條目名稱。

回答

4

嘗試使用這個正則表達式"=(.*?),"這樣的:

String str = "Locaton;RowIndex;maxRows=New York, NY_10007;1;4 "; 
    Pattern pattern = Pattern.compile("=(.*?),"); 
    Matcher matcher = pattern.matcher(str); 
    if (matcher.find()) { 
     System.out.println(matcher.group(1)); 
    } 

輸出:

New York 

使用matcher.group(1)手段捕獲組可以很容易地提取正則表達式匹配的部分,還括號創建一個編號的捕獲組。 它將正則表達式部分匹配的字符串部分存儲在圓括號內。

Match "Locaton;RowIndex;maxRows=New York, NY_10007;1;4 " 
Group 1: "New York" 
+0

你能到非正則表達式的專家像我解釋一下爲什麼我們需要「?」在捕獲組內? – eol

+1

@ fbo3264現在更清晰;) – Abdelhak

1

使用捕獲組,正則表達式從字符串,它完美的捕捉特定的數據。

String str = "Locaton;RowIndex;maxRows=New York, NY_10007;1;4 "; 
    String pattern = "(.*?=)(.*?)(,.*)"; 
    Pattern r = Pattern.compile(pattern); 

    Matcher m = r.matcher(str); 

    if (m.find()) { 
     System.out.println("Group 1: " + m.group(1)); 
     System.out.println("Group 2: " + m.group(2)); 
     System.out.println("Group 3: " + m.group(3)); 
    } 

這裏是輸出

Group 1: Locaton;RowIndex;maxRows= 
Group 2: New York 
Group 3: , NY_10007;1;4