2012-02-26 16 views
2

私は唯一のこれらのトークンにname: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]に似た文字列の数を分割したい:スプリットのトラブル分割文字列(正規表現)は、Java

john 
20 
toledo 
seattle 
[2/8/12 15:48:01:837 MST] 

私もこの

String delims = "(name|id|dest|from|date_time)?[:,\\s]+"; 
String line = "name: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]"; 
String[] lineTokens = line.split(delims, 5); 

for (String t : lineTokens) 
{ 
    // for debugging 
    System.out.println (t); 
    // other processing I want to do 
} 

が、すべてをやっていますlineTokensの要素は、空白または空白のいずれかになります。 lineTokens [0]は ""、lineTokens [1]は "john"、lineTokens [2]は ""、lineTokens [3]は "20"などです。私は間違っているの?

答えて

3

あなたの正規表現は全体として, id:と一致しておらず、,と一致しており、次にid:が2番目の一致としてマッチしているという問題があります。これら2つのマッチの間に空文字列があります。全体に合わせて変更する必要があります。

String delims = "(,)?(name|id|dest|from|date_time)?[:\\s]+"; 

http://ideone.com/Qgs8y

+0

これは機能します。私はなぜlineTokensの0番目のインデックスがまだ空であるのか、split()の2番目の引数(なぜなら0番目のインデックスが空であるように見える)のために6を渡す理由について興味があります。 – Nate

+0

ああ、両方の答えは実際は同じです。文字列が区切り文字で始まっている場合、最初の一致として空の文字列を取得します。その一致を無視する必要があります。 –

+0

ああああ。ありがとう! – Nate

2

なぜ少し複雑な正規表現のソリューション:このような何か。

String str = "name: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]"; 
String[] expr = str.split(", "); 
for(String e : expr) 
System.out.println(e.split(": ")[1]); 

出力=

ジョン

トレド

シアトル

[2/8/12 15:48:01:837 MST]

+0

技術的には、 ""と "": "'は依然として正規表現です。 –

+0

@isbadawi:いいキャッチだけど、何を意味するのか知っている。 – RanRag

1

私はあなたのコードにいくつかの変更作られた:それはまで行の先頭からの撮影ですので、また、あなたが、lineTokensの最初の要素を無視すべきで

String delims = "(name|id|dest|from|date_time)[:,\\s]+"; 
    String line = "name: john, id: 20, dest: toledo, from: seattle, date_time: [2/8/12 15:48:01:837 MST]"; 
    String[] lineTokens = line.split(delims); 

    for (String t : lineTokens) 
    { 
     // for debugging 
     System.out.println (t); 
     // other processing I want to do 
    } 

を「名前:....」

+0

これをテストしましたか?私はあなたのコードからの出力は、 'lineTokens [1] ==" john "の代わりに' lineTokens [1] == "john" – Nate

関連する問題