我有一个包含多个字段的文件,我需要将它们单独存储到数组中。
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
我哪里出错?
答案 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的更多信息,了解为什么它不能使用扫描仪。