Java:使用分隔符读取文件时出错

时间:2013-04-17 12:22:48

标签: java arrays delimiter

我有一个包含多个字段的文件,我需要将它们单独存储到数组中。

Steve;stiffy;123;88
Sam;sammy;456;55

但是当我尝试存储它们时,我不断收到错误说java.util.NoSuchElementException

这是我存储数据的代码

void loadCustomer(){

    try {
        Scanner sc = new Scanner(new File("CustomerInfo.txt"));
        sc.useDelimiter(";");
        while (sc.hasNext())
        {
            cusName.add(sc.next());
            cusUser.add(sc.next());
            cusPass.add(sc.next());
            cusCCNum.add(sc.next());
        }
}

我可以通过改变

让它发挥作用
cusCCNum.add(sc.next());

cusCCNum.add(sc.nextLine());

但它会忽略分隔符,当我打印出cusCCNum.get(1)时,它会显示

;88

而不是

88

我哪里出错?

4 个答案:

答案 0 :(得分:4)

88和Sam之间没有分隔符。

  scanner.useDelimiter(";|\n");

答案 1 :(得分:2)

使用String tokenizer而不是分隔符。 获取输入作为字符串并解析它;字符作为标记。

了解如何使用stringtokenizer here

答案 2 :(得分:0)

当您为每个元素调用4个下一个元素时,如果有1个下一个元素,则会导致异常,这将执行以下操作:

while (RecentElement is not the last one)
{
    Read (RecentElement + 1)
    Read (RecentElement + 2)
    Read (RecentElement + 3)
    Read (RecentElement + 4)
}

有些当你得到exception of the next() method,因为你访问的是一个不存在的元素:

  

抛出:NoSuchElementException - 如果没有更多的令牌可用

您应该使用新行作为分隔符,并且每个新行都会解析记录中的数据,例如使用split函数:

   sc.useDelimiter("\n");      
   while (sc.hasNext())
   {
       for(String g: sc.next().split(";"))
         System.out.println(g);          
   }

答案 3 :(得分:0)

看起来您需要读取每一行,使用分隔符对其进行标记并将值设置为数组。

我可以通过StringTokenizer来完成。

while (sc.hasNextLine())            {               
                StringTokenizer st =  new StringTokenizer(sc.nextLine(),";");               
                while (st.hasMoreElements()) {
                    System.out.println(st.nextElement());
                }
            }

我很惊讶,需要阅读有关Scanner api的更多信息,了解为什么它不能使用扫描仪。