1

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

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

4 回答 4

4

88 和 Sam 之间没有分隔符。

  scanner.useDelimiter(";|\n");
于 2013-04-17T12:29:44.790 回答
2

使用字符串标记器而不是分隔符。以字符串形式获取输入并通过 ; 解析它 字符作为令牌。

在这里学习,如何使用 stringtokenizer

于 2013-04-17T12:26:27.823 回答
0

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

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

有时你会因为访问一个不存在的元素而得到next() 方法的异常:

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

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

   sc.useDelimiter("\n");      
   while (sc.hasNext())
   {
       for(String g: sc.next().split(";"))
         System.out.println(g);          
   }
于 2013-04-17T12:46:54.657 回答
0

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

我可以通过 StringTokenizer 做到这一点。

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

我很惊讶,需要阅读更多关于 Scanner api 的内容,以了解它为什么不能与扫描仪一起使用。

于 2013-04-17T12:48:54.457 回答