[英]Java StringTokenizer, empty null tokens
我试图将一个字符串分成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 == null
比s.isEmpty()
更好。
在Apache Commons Lang库中使用StringUtils.splitPreserveAllTokens()
如果你想要保留空标记 , string.split
将无法令人满意地工作。 StringTokenizer
也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);
这个类提供了一些简单的功能,提供了易于使用的方法来转换分隔字符串,如CSV字符串,集合和数组。
如果你想要保留空标记, 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.