10

文字列を29個のトークンに分割しようとしています.....stringtokenizerはnullトークンを返しません。string.splitを試しましたが、何か間違ったことをしていると思います。

String [] strings = line.split(",", 29);

サンプル入力:

10150,15:58,23:58,16:00,00:00,15:55,23:55,15:58,00:01,16:03,23:58,,,,,16:00,23:22,15:54,00:03,15:59,23:56,16:05,23:59,15:55,00:01,,,,
10155,,,,,,,,,,,07:30,13:27,07:25,13:45,,,,,,,,,,,07:13,14:37,08:01,15:23
10160,10:00,16:02,09:55,16:03,10:06,15:58,09:48,16:07,09:55,16:00,,,,,09:49,15:38,10:02,16:04,10:00,16:00,09:58,16:01,09:57,15:58,,,,
4

5 に答える 5

16

末尾の空の文字列を保持したいが、最大のマジックナンバーを与えたくない場合は、負の制限を使用します。

line.split(",", -1)

の場合line.equals("a,,c")line.split(",", -1)[1].isEmpty(); そうではありませんnull。これは","、が区切り文字である場合",,"、2つの区切り文字の間に。ではなく空の文字列があるためnullです。


例:

上記の説明を使用して、次の例を検討してください。",,"

","、、、 nullおよびを期待するかもしれませんが","

実際の結果は","、、 ""","


nullによって返される配列内の空の文字列の代わりに必要な 場合は、配列splitを手動でスキャンして、それらを。に置き換える必要がありnullます。しかし、なぜそれs == nullがより良いのかはわかりませんs.isEmpty()

も参照してください

于 2010-04-25T14:46:57.887 に答える
5

ApacheCommonsLangライブラリStringUtils.splitPreserveAllTokens()で使用

于 2013-07-12T13:18:43.683 に答える
2

空のトークンを保持したい場合はstring.split、十分に機能しません。StringTokenizerまた、動作しません。私はあなたに役立つかもしれない次の方法で来ました

public static String[] splitTotokens(String line, String delim){
  String s = line;
  int i = 0;

  while (s.contains(delim)) {
  s = s.substring(s.indexOf(delim) + delim.length());
      i++;
  }
  String token = null;
  String remainder = null;
  String[] tokens = new String[i];

  for (int j = 0; j < i; j++) {
    token = line.substring(0, line.indexOf(delim));
    //System.out.print("#" + token + "#");
    tokens[j] = token;
    remainder = line.substring(line.indexOf(delim) + delim.length());
    //System.out.println("#" + remainder + "#");
    line = remainder;
    }

  return tokens;`  
 }
于 2012-02-14T05:15:33.657 に答える
0

空のトークンを保持したい場合は、string.split()十分に機能しません。StringTokenizerまた、動作しません。私はあなたに役立つかもしれない以下の方法を持ってきました:

public static String[] splitTotokens(String line, String delim){
    String s = line;
    int i = 0;

    while (s.contains(delim)) {
        s = s.substring(s.indexOf(delim) + delim.length());
        i++;
    }
    String token = null;
    String remainder = null;
    String[] tokens = new String[i];

    for (int j = 0; j < i; j++) {
        token = line.substring(0, line.indexOf(delim));
        // System.out.print("#" + token + "#");
        tokens[j] = token;
        remainder = line.substring(line.indexOf(delim) + delim.length());
        //System.out.println("#" + remainder + "#");

        line = remainder;
    }
    return tokens;
}
于 2012-02-14T05:23:01.340 に答える
0
use this org.springframework.util.StringUtils

org.springframework.util.StringUtils.delimitedListToStringArray(data, delimit);

このクラスは、CSV文字列などの区切り文字列と、コレクションおよび配列の間で変換するための使いやすいメソッドを提供するいくつかの単純な機能を提供します。

于 2013-10-17T18:49:02.567 に答える