为啥我的方法不会从文件中读取每个值?
Posted
技术标签:
【中文标题】为啥我的方法不会从文件中读取每个值?【英文标题】:Why won't my method read in every value from a file?为什么我的方法不会从文件中读取每个值? 【发布时间】:2016-02-29 22:39:17 【问题描述】:public static int getBoys(ArrayList<String> boysNames, Scanner s) throws IOException
// Getting boys file location
System.out.println("Please enter the file name containing the the boys names.");
String boyFileLocation = s.nextLine();
// Opening the file containing the names of boys
File boyFile = new File(boyFileLocation);
Scanner BF = new Scanner(boyFile);
int initialBoyCount = 0;
int i = 0;
boysNames.add(BF.nextLine());
while (BF.hasNextLine())
if (BF.nextLine().equals(boysNames.get(i)))
else
boysNames.add(BF.nextLine());
initialBoyCount++;
i++;
System.out.println(boysNames.get(i));
return (initialBoyCount);
我正在尝试从文件中读取名称列表并将它们添加到数组列表中。但是,某些名称存在重复项,我只能保留唯一名称(如果已经存在,请不要再次添加)。然而,我发现它只是给了我其他所有的名字。从 2 开始,并给我以下错误。
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at namesList.namesList.getBoys(namesList.java:53)
at namesList.namesList.main(namesList.java:27)
【问题讨论】:
【参考方案1】:本行异常原因
if (BF.nextLine().equals(boysNames.get(i)))
你读了一行,如果方程不是 true
在 else 分支你再次调用 BF.nextLine()
。所以有时你读了两行,但你只调用了一次hasNextLine()
。
解决方案:在if
语句之前只读取一次。
【讨论】:
我明白你在说什么。那么有什么方法可以在不移动标记的情况下两次引用文件中的内容? @M.Pestonit 解决方案:您应该只调用一次hasNextLine()
和BF.nextLine()
。我刚刚用解决方案改变了我的答案。
@Andriy 尝试将 String currentLine = BF.nextLine()
作为 while 循环的第一行。然后引用currentLine
而不是BF.nextLine()
。以上是关于为啥我的方法不会从文件中读取每个值?的主要内容,如果未能解决你的问题,请参考以下文章
sscanf() 的问题不会读取 char 数组中的每个 0
为啥我的 Python 代码在从文本文件中读取时会打印额外的字符“”?
我在读取 ext2 文件系统的超级块结构时遇到问题。为啥我的代码读取 log2(block_size) 字段的错误值?
为啥 QtSerialPort 在运行超过一次或两次后不会读取?