如何从逗号分隔的数据中解析空标记?

时间:2013-10-23 13:59:30

标签: java

我有一些包含逗号分隔数据的大文件。类似的东西:

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“}

问题:解析逗号分隔数据时如何获得空标记?

谢谢!

4 个答案:

答案 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");