2017-08-15 105 views
-4

我有一條線:id,name,field,field
例如:"100,artist10XD,0,1"分詞正則表達式

我想用正則表達式分隔它們。問題是artistName也可以有一個逗號(這裏的逗號的實際數量是未知的),所以我不能使用split(",")函數。

結果應該是:

100 
artist10XD 
0 
1 

每行有4個值。

請注意,我需要根據規則使用正則表達式。

+0

你總是有每行4個值?爲什麼你不能使用製表符而不是逗號分隔這些值? – khriskooper

+0

artistName有多少個逗號? –

+0

如果你的值有一個分隔符,你應該考慮圍繞該值使用引號,例如100,「artis,t10XD」,0,1。當你分開這條線時,把引號中的所有內容都當作一個單獨的值。 – Vitolds

回答

3

,您仍然可以使用split(",");

結果是

split[0] == 100, 
split[last -1] == 0, 
split[last] == 1, 

其餘級聯,是ARTISTNAME

0

而是分裂由正則表達式的路線,我會嘗試將正則表達式整條線。如果你總是有每行只有藝術家名稱4項的值可能包含逗號,那麼你的正則表達式可能是這樣的:

([^,]+),(.+),([^,]+),([^,]+) 

您將有4組如果符合藝術家名字的正則表達式匹配的第二組中。例如:

BufferedReader reader = new BufferedReader(new StringReader("" 
    + "100,artist10XD,0,1\n" 
    + "100,artist,10,XD,0,1")); 

Pattern pattern = Pattern.compile("([^,]+),(.+),([^,]+),([^,]+)"); 
String line; 

while ((line = reader.readLine()) != null) 
{ 
    Matcher matcher = pattern.matcher(line); 

    if (matcher.matches()) 
    { 
    System.out.println("Artist name: " + matcher.group(2)); 
    } 
} 

上面的代碼提供了以下的輸出:

Artist name: artist10XD 
Artist name: artist,10,XD 
+0

我應該逐行閱讀。我應該採取一條線做另一條。 – nixiehi

+0

這是正確的,你逐行閱讀,並應用正則表達式到每一行。我更新了答案以包含一個例子。 – htfv