Java StringTokenizer,空null标记

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

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

 line.split(",", -1) 

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


例:

使用上面的解释,请考虑以下示例: ",,"

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

实际结果是","""","


如果你想在split返回的数组中使用null而不是空字符串,那么你必须手动扫描数组并用null替换它们。 我不确定为什么s == nulls.isEmpty()更好。

也可以看看

  • Java String.indexOf和空字符串

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

如果要保留空标记string.split将无法令人满意地工作。 StringTokenizerStringTokenizer 。 我来了以下方法,可能对您有所帮助

 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;` } 

如果要保留空标记, 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; } 
 use this org.springframework.util.StringUtils org.springframework.util.StringUtils.delimitedListToStringArray(data, delimit); 

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