Tokenizer在拆分之前跳过空白值 - Java

时间:2014-10-23 07:58:10

标签: java token tokenize

我使用Tokenizer来分割一个像这样分开的文本文件:

第一个名字,中间名,最后一个名字

哈利,抢劫,公园

汤姆,,做

while (File.hasNext()) 
    {
        StringTokenizer strTokenizer = new StringTokenizer(File.nextLine(), ",");

        while (strTokenizer.hasMoreTokens())
        {

我已经用这种方法拆分了它。

问题在于,当缺少数据时(例如Tom没有中间名),它将忽略拆分(,)并将下一个值注册为中间名。

如何让它将其注册为空白?

4 个答案:

答案 0 :(得分:0)

改为使用String.split

"tom,,do".split(",")将生成一个包含3个元素的数组:tom, (blank) and do

答案 1 :(得分:0)

对我而言,就像你有两个解决方案:

  • 您可以按照ToYonos OR。
  • 的建议,将文件中的逗号加倍
  • 如果只有2个令牌表示此人没有中间名,您可以在使用countTokens()方法将值分配给变量之前计算令牌。

答案 2 :(得分:0)

基于Davio的答案,您可以管理空白并将其替换为您自己的字符串:

String[] result = File.nextLine().split(",");
for (int x = 0; x < result.length; x++){
    if (result[x].isEmpty()) {
    System.out.println("Undefined");
    } else
    System.out.println(result[x]);
}

答案 3 :(得分:0)

来自StringTokenizer

的JavaDoc
  

StringTokenizer是为保持兼容性而保留的遗留类   原因虽然在新代码中不鼓励使用它。建议   任何寻求此功能的人都使用String的split方法   或者改为java.util.regex包

因此,您不需要使用StringTokenizer。

String.split的一个例子

String name = "name, ,last name";
String[] nameParts = name.split(",");
for (String part : nameParts) {
    System.out.println("> " + part);
}

这会产生以下输出

> name
>  
> last name