Java StringTokenizer.nextToken()跳过空字段

Fir*_*Fox 15 java string tokenize

我使用标签(/ t)作为分隔符,我知道我的数据中有一些空字段,例如:

one->two->->three
Run Code Online (Sandbox Code Playgroud)

其中 - >等于标签.如您所见,空白字段仍被选项卡正确包围.使用循环收集数据:

 while ((strLine = br.readLine()) != null) {
    StringTokenizer st = new StringTokenizer(strLine, "\t");
    String test = st.nextToken();
    ...
    }
Run Code Online (Sandbox Code Playgroud)

然而,Java忽略了这个"空字符串"并跳过了这个领域.

有没有办法绕过这种行为并迫使java在空字段中读取?

npe*_*npe 16

Sun的bug数据库中StringTokenizer有一个关于此问题的RFE状态Will not fix.

对此RFE的评估表明,我引述:

随着java.util.regex包装的增加1.4.0,我们基本上已经过时了StringTokenizer.出于兼容性原因,我们不会删除该类.但只是regex给你你需要的东西.

然后建议使用String#split(String)方法.


Fir*_*Fox 9

谢谢你.由于第一条评论,我找到了一个解决方案:是的,你是对的,谢谢你的参考:

 Scanner s = new Scanner(new File("data.txt"));
 while (s.hasNextLine()) {
      String line = s.nextLine();
      String[] items= line.split("\t", -1);
      System.out.println(items[5]);
      //System.out.println(Arrays.toString(cols));
 }
Run Code Online (Sandbox Code Playgroud)


adr*_*ale 5

您可以使用ApacheCommons StringUtils.splitPreserveAllTokens()。它完全满足您的需求。