19

私がやろうとしていることをよりよく説明するために、次の例があります。

String text = "a,b,,,,c,,";
String[] split = text.split(",");
for(int i=0;i<split.length;i++){
    System.out.println("I = "+i+" "+split[i]);
}

出力は次のとおりです。

I = 0 a

I = 1 b

I = 2 

I = 3 

I = 4 

I = 5 c

しかし、私が望むのは、サイズ 8 の配列を取得することです。

I = 6 

I = 7

もちろん、最後の 2 つの要素は空の文字列になりますが、それらを取得することが不可欠です。また、それらを持つことは論理的だと思います。つまり、もし私が持っていたら:

String text = "a,b,,,,c,,d";

結果はサイズ 8 の配列になり、2 つの例に大きな違いはないと思います。

4

2 に答える 2

25
String[] split = text.split(",", -1);

この動作は実際にはトリッキーに見えますが、実際には公式ドキュメントで説明されています (私見ではあまりよくありません) 。

n が正でない場合、パターンは可能な限り何度でも適用され、配列は任意の長さにすることができます

の問題text.split(",")は、 と同等であるということtext.split(",", 0)です。ドキュメントで説明されているように、0 制限を使用します。

n がゼロの場合、パターンは可能な限り何度でも適用され、配列の長さは任意であり、末尾の空の文字列は破棄されます。

空の文字列を破棄したくないことは間違いありません。

于 2013-02-27T13:27:20.683 に答える
0

私が好む(外部ライブラリを使用できる場合):

String[] split = StringUtils.splitPreserveAllTokens(text, ',');

ほとんどの場合、StringUtilsライブラリはデフォルトの Java 実装よりもほんの少しだけ効率的である傾向があります。さらに、一見すると、この分割が何をしているのかはメソッド名から明らかですが、一見したところ、制限が -1 の通常の文字列分割はそうではないかもしれません。

于 2013-02-27T13:40:07.043 に答える