Java StringTokenizer,空空空标记

Java StringTokenizer,空空空标记,java,string,stringtokenizer,string-split,Java,String,Stringtokenizer,String Split,我正在尝试将一个字符串拆分为29个标记。。。。。stringtokenizer不会返回空标记。我尝试了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

我正在尝试将一个字符串拆分为29个标记。。。。。stringtokenizer不会返回空标记。我尝试了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,,,,

如果希望保留尾随的空字符串,但不希望为最大值指定幻数,请使用负限制:

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

示例:

使用上面的解释,考虑下面的例子:<代码>,,“< /代码> BR>

尽管您可能期望
,“
null
,”

实际结果是“
”、“
”、“
”、“
和“
”、“


如果希望
null
而不是
split
返回的数组中的空字符串,则必须手动扫描数组并将其替换为
null
。但是,我不确定为什么
s==null
s好

另见

如果希望保留空令牌
字符串,则拆分将无法令人满意地工作
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;`  
 }
publicstaticstring[]splitTotokens(字符串行,字符串delim){
字符串s=行;
int i=0;
而(s.contains(delim)){
s=s.substring(s.indexOf(delim)+delim.length());
i++;
}
字符串标记=null;
字符串余数=null;
字符串[]标记=新字符串[i];
对于(int j=0;j
如果希望保留空令牌,则
string.split()
将无法令人满意地工作<代码>字符串标记器
也将不起作用。我提供了以下方法,可能会对您有所帮助:

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;
}
publicstaticstring[]splitTotokens(字符串行,字符串delim){
字符串s=行;
int i=0;
而(s.contains(delim)){
s=s.substring(s.indexOf(delim)+delim.length());
i++;
}
字符串标记=null;
字符串余数=null;
字符串[]标记=新字符串[i];
对于(int j=0;j
在库中使用
StringUtils.splitPreserveAllTokens()


这个类提供了一些简单的功能,提供了易于使用的方法,可以在分隔字符串(如CSV字符串)与集合和数组之间进行转换。

我检查错了。29实际上是有效的-我也是。是的,我注意到了。我只是检查字符串是否为空而不是空。@user69:使用
isEmpty()
如果是Java6,则使用
length()==0
否则。不要使用
等于(“”
)。
use this org.springframework.util.StringUtils

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