我有一些包含逗号分隔数据的大文件。类似的东西:
firstname,middlename,lastname
James,Tiberius,Kirk
Mister,,Spock
Leonard,,McCoy
我正在使用StringTokenizer来解析数据:
StringTokenizer st = new StringTokenizer(sLine, ",");
while (st.hasMoreTokens()) {
String sTok = st.nextTokens;
tokens.add(tok);
}
问题是,在没有中间名的行上,我只获得两个令牌,{“Mister”,“Spock”},但我想要三个令牌,{“Mister”,“,”Spock“}
问题:解析逗号分隔数据时如何获得空标记?
谢谢!
答案 0 :(得分:3)
您可以使用String#split(String regex)方法。
String[] split = sLine.split(",");
for (String s : split) {
System.out.println("S = " + s); //Note there will be one empty S
tokens.add(s);
}
答案 1 :(得分:2)
使用split(“,”)代替StringTokenizer:
String[] aux = sLine.split(",");
for(int i = 0; i < aux.length; i++) {
String sTok = aux[i];
tokens.add(sTok);
}
您可以在文档中看到StringTokenizer是一个遗留类,仅用于复古兼容性: http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html
答案 2 :(得分:1)
使用split
方法,但将-1
作为第二个参数传递以保留空字符串
sLine.split(",", -1);
答案 3 :(得分:0)
考虑使用Guava Splitter
的拆分器你可以创建一个有或没有省略空字符串的分割器。
//Example without omit empty Strings (default)
Splitter splitterByComma = Splitter.on(",");
Iterable<String> split = splitterByComma.split("Mister,,Spock");
//Example omitting empty Strings
Splitter splitterByComma = Splitter.on(",").omitEmptyStrings();
Iterable<String> split = splitterByComma.split("Mister,,Spock");