0

重複の可能性:
文字列分割で空の結果が返されない

コンマ (,) で区切られた単語の文字列があり、メインの文字列を部分文字列にトークン化または分割する必要があります。たとえばstring="file1,param1,file2,param2,file3," 、文字列の意味は、すべてのファイル名とそれに渡されたパラメーターのリストです。同様に、file1--> param1、file2-->param2、および file3 にはパラメータは存在しません。

そのため、ファイル名とパラメーターがあればそれを抽出する必要があります。パラメータがない場合は、空の文字列 ("") を取得する必要があります。

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class XStringTokenizer {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String str = new String("File1,param1,File2,");
        List list = new ArrayList();
        System.out.println(str.split(",").length);
        String[] string = str.split(",");
        for(int i=0;i<string.length;i++){
            list.add(string[i]);
        }
        System.out.println(list);
    }
}

上記のサンプル コードの現在の出力は [File1,param1,File2] ですが、予想される出力は [File1,param1,File2,] です。基本的に、上記の文字列の 3 番目のコンマの後の最後の空の文字列を見逃すことはできませんstr

4

7 に答える 7

3

使用する必要があるようです

 String[] string = str.split(",",-1);

String.split(String,int)のjavadocには、「n が正でない場合、パターンは可能な限り何度でも適用され、配列の長さは任意です」と記載されています。

于 2012-06-27T17:52:55.383 に答える
1

Use public String[] split(String regex, int limit) with negative limit

于 2012-06-27T17:51:45.730 に答える
1

Remove the last , or consider using Apache Commons Lang package, that includes StringUtils.join(), which does exatcly what you want.

于 2012-06-27T17:54:21.920 に答える
0

コンマは文字列の最後の文字であるため、 str.split(",") は、コンマの後に「無」ではなく何らかの文字が続く場合にのみ分割されると思います。したがって、その場合、分割はそれを区切り文字として認識せず、null になるため、配列で期待する 4 番目の文字列を生成しません。

これがお役に立てば幸いです。

于 2012-06-27T17:53:33.690 に答える
0

文字列が「,」で終わっているかどうかを確認してから、リストにヌル文字列を追加するだけで簡単に実行できます。最後にこれを行う必要があります

if(str.endsWith(',')) list.add("");
于 2012-06-27T17:54:12.760 に答える
0
String str = new String("File1,param1,File2,");
java.util.Tokenizer tk= new java.util.Tokenizer(str,",");
while(tk.hasMoreTokens()) {
    String tokenFile= tk.nextToken();
    String tokenParam= tk.nextToken();
    // do things...
}
于 2012-06-27T17:51:57.193 に答える
-2

それは String.split の仕組みではありません。

したがって、後続の空の文字列は、結果の配列には含まれません。

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split%28java.lang.String%29

文字列がカンマで終わっているかどうかを確認してから、空の文字列を自分で追加できます

于 2012-06-27T17:51:18.630 に答える