0

我有一些带有逗号分隔数据的大文件。就像是:

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

4 回答 4

2

您可以使用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);
}
于 2013-10-23T14:02:47.020 回答
1

使用 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

于 2013-10-23T14:02:36.167 回答
0

考虑使用Guava Splitter 的 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");
于 2013-10-23T17:18:14.833 回答
0

使用split方法,但-1作为第二个参数传递以保留空字符串

sLine.split(",", -1);
于 2013-10-23T14:04:37.367 回答