2011-12-13 6 views
0

すべての単語をセミコロンで区切って配列に分割する単語文字列を分割したい。セミコロンファイルを配列に分割する、奇妙なもの

なぜこの文字列の長さは2ですか?私のファイル内のすべての行がセミコロンで区切られた6つのフィールドに分離されているので、配列の長さを常に6にするにはどうしたらいいですか?配列の長さを固定すると、オブジェクトを作成するのがずっと簡単になります。

String line = "Name;Phone;;;;;"; 
String parts[] = line.split(";"); 

この場合、部品の長さが2

答えて

0

になります私はあなたがあなたが分割の制限を強制することができjavadocから見ることができるように

String parts[] = line.split(";",6); 

を使用する必要があると思います方法。

+0

を有するが、これは6のサイズに配列を強制しない、それだけに制限されます。 – Jon

+0

@Jon Trueしかし、常に6フィールドがセミコロンで区切られている場合、結果は常に6の長さになります。 – Danny

1

Apache StringUtilsを使用することをお勧めします。

具体的には、私は次の2つの方法のいずれかを使用します。

splitPreserveAllTokens(String str, String separatorChars) 
splitPreserveAllTokens(String str, String separatorChars, int max) 

これらの方法は、あなたの配列に空のトークンを保持します。 2番目の結果は最大サイズ(たとえば6)になりますが、単語の数が制限を超えた場合は、最後のトークンに区切り文字が含まれる可能性があります。

+0

'Scanner'は使いやすく、それぞれを別々に処理したい場合は拡張可能です(例えば私の答え)。私はこれが動作するので、投票しませんが、私はこれを行うための最も良い方法だとは思わない。 – Jon

+1

@ジョン私は、「スキャナ」は「使いやすい」ものではないと主張します。 'String [] myArray = StringUtils.splitPreserveAllTokens(" Name; Phone ;;;; "、"; ");'はとても簡単です。入力に常に固定数のデリミタが含まれている場合は、これが最も洗練されたソリューションです。そうでない場合は、別の解決策がより適切かもしれないことに同意します。 –

1

最初

String parts[] = new string[6]; 
1

String.split()方法のマニュアルは、末尾の空の文字列がスキップされていることを言及するように配列を宣言することができます。

あなたは空の文字列を末尾に保つために、以下を試してみてください可能性があります

String parts[] = line.split(";", -1); 
+0

6の代わりに7つのトークンが返されます。 –

1

ではなくline.split(";",-1)を試してみてください。

+0

これは配列のサイズを6に強制しませんが、実際には制限なしで使用する以外の違いはありません。 – Jon

+0

@ジョン彼は限界を使用しない場合とは異なります。制限として負の値を指定すると、空の末尾の文字列は破棄されません。しかし、制限を与えないと空の末尾の文字列は破棄されます。 – Danny

+0

引数との相違点は、空の値を許可することです。 OPの場合、5 ';がある場合、6つの要素で終わるはずです。 – Vlad

0

使用Google's Guava libraryそれは高度スプリッタ

Splitter.on(';') 
     .trimResults() 
     .omitEmptyStrings() 
     .split("Name;Phone;;;;;"); 
+0

これは彼のプログラムの大きなアドオンです。簡単な方法があります。 – Jon

+0

私は確信していれば、彼はlibにもっと多くの用途を見つけるでしょう:)。あなたが提供している他のオプションを見ると、私は簡単な方法についてはわかりません –