2013-03-07 11 views
9

私はリストに変換しようとしている文字列を持っていますが、空のエントリがあります。任意の数のコンマとスペースで文字列を分割する

",A,B,C,D, ,,," 
returns 
[, A, B, C, D, , , ,] 

私はすべての "空" のカンマを削除する:

[A, B, C, D] 

私は私が望む結果が得られない

current.split(",+\\s?") 

をしようとしています。代わりにどのような正規表現を使うべきですか?

+0

あなたはどのような言語を使っているの? – Bergi

+0

@Bergiそのjava。それは重要ですか?私は正規表現だけで助けを求めています。 – Aboutblank

+3

はい、異なる言語は異なる機能と構文を持つ異なる正規表現の味を使用するためです – Bergi

答えて

14

あなたは2つのステップを必要とするが、唯一の1行目:

String[] values = input.replaceAll("^[,\\s]+", "").split("[,\\s]+"); 

replaceAll()への呼び出しは、大手セパレータを削除します。
スプリットは任意の数のセパレータで行われます。

split()の振る舞いは、末尾のブランク値が無視されることを意味します。したがって、分割する前に後続の区切り線をトリムする必要はありません。ここで

はテストです:

public static void main(String[] args) throws Exception { 
    String input = ",A,B,C,D, ,,,"; 
    String[] values = input.replaceAll("^[,\\s]+", "").split("[,\\s]+"); 
    System.out.println(Arrays.toString(values)); 
} 

出力:カンマとスペースより

[A, B, C, D] 
3

あなたの試合次のいくつかの空白を含めたくないだけでなく、連続しcommataが1つの単位として、それらに分割する:私はこのためにSplitter in Guavaを使用する

(,\s*)+ 
current.split("(?:,\\s*)+") 
2

Splitter.on(',').omitEmptyStrings().trimResults().split(",A,B,C,D, ,,,"); 

私は正規表現よりも読みやすくなっています。

0

任意の文字をマッチングクリーナーソリューションである可能性が高い:

/[^, ]+/g

",A,B,C,D, ,,,".match(/[^, ]+/g) 
// → ["A", "B", "C", "D"] 

あなたはJavascriptで作業している場合もLodash _.words方法(上記の正規表現のためにそれらに賛辞)使用することができます

https://lodash.com/docs#words

_.words('fred, barney, & pebbles', /[^, ]+/g); 
// → ['fred', 'barney', '&', 'pebbles'] 
関連する問題