Java StringTokenizer,空null标记

时间:2010-04-25 14:43:52

标签: java string stringtokenizer string-split

我正在尝试将一个字符串拆分为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,,,,

5 个答案:

答案 0 :(得分:16)

如果您希望保留尾随的空字符串,但您不想给出最大的幻数,请使用负限制:

line.split(",", -1)

如果line.equals("a,,c"),则line.split(",", -1)[1].isEmpty();它不是null。这是因为当","是分隔符时,",,"在两个分隔符之间有一个空字符串,而不是null

<小时/> 示例:

使用上述说明,请考虑以下示例:",,"

虽然您可能期望","null","

实际结果为","""","

<小时/> 如果您想要null而不是split返回的数组中的空字符串,那么您必须手动扫描数组并将其替换为null。我不确定为什么s == nulls.isEmpty()更好。

另见

答案 1 :(得分:5)

Apache Commons Lang库中使用StringUtils.splitPreserveAllTokens()

答案 2 :(得分: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;`  
 }

答案 3 :(得分: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;
}

答案 4 :(得分:0)

use this org.springframework.util.StringUtils

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

这个类提供了一些简单的功能,提供了易于使用的方法来转换分隔的字符串,例如CSV字符串,集合和数组。