2016-05-02 19 views
1

がここに私の入力分割文字が

....

が、私はそれが到達したときに、各文字列を区切るしたいALPO..LAPOL.STRINGであるJavaで空の値を返します「」文字列配列リストに格納します。

私は正規表現スプリット( "\。+"))に問題があり

ArrayList<String> words = new ArrayList<> (Arrays.asList(chars.stream().map(String::valueOf) 
     .collect(Collectors.joining("")).split("\\.+"))); 

、以下のコードを使用してみました。

予想される出力:

ALPO

LAPOL

STRING

実際の出力:

"" - >空白

LAPOL多くがあるので、それは空の値として、リストの最初の値を出力します

STRING

「」

+0

あなたは '.... ALPO..LAPOL.STRING'文字列を分割すると言っていますか? –

+0

あなたはその入力を文字列または文字配列リストとして取ることができます。私は文字配列のリストとしてそれを取った@WiktorStribiżewコード – Anusha

答えて

5

区切り文字は、取得する必要がある最初の値よりも前に一致するため、空の要素が表示されます

文字列配列の空白の値を取り除く方法を教えてください。

あなたが.replaceFirst("^\\.+", "")で最初の文字列の先頭から区切り記号を削除して、分割する必要があります。

String results[] = "....ALPO..LAPOL.STRING".replaceFirst("^\\.+", "").split("\\.+"); 
System.out.println(Arrays.toString(results)); 

IDEONE demo

^\\.+パターンのmatchを参照してください。文字列の先頭(^)、1つ以上のリテラルドット(\\.+)。 を使用する必要はありません)。 Javaでの分割に

ビットの詳細はdocumentationで見つけることができます:

public String[] split(String regex)
スプリット与えられた正規表現に一致する位置でこの文字列。 このメソッドは、指定された式と制限引数zeroの2つの引数を持つsplitメソッドを呼び出すのと同じように機能します。 空の文字列の末尾には、結果の配列にが含まれません。

見つかった場合は、先頭の空の要素が含まれます。だから、文字列の開始時にそれらの区切り文字を取り除く必要があります。

+0

それは魅力的な..のように動作します!スプリット( "\\。+")について説明してください。正規表現は?@WiktorStribiżew – Anusha

+0

これはあなたの正規表現です。 1つ以上のリテラルドット(ピリオド)にマッチするだけです。 –

+0

@Anusha [JavaDoc](http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-int-)は非常によく説明しています。 "この文字列の先頭に正の幅の一致があると、空の先頭の部分文字列が結果の配列の先頭に含まれますが、最初はゼロ幅の一致がありますが、空の先頭部分文字列は生成されません。 – Vampire