java - 数组列表和文件

标签 java file arraylist while-loop java.util.scanner

我正在编写一个方法,该方法接收一个文件并返回一个数组列表,其中包含文件中的每个其他单词。这些文件可以包含多行。
例如,如果我扫描文件,它会读取

{"red", "orange", "yellow", "green", "blue", "purple"}

该方法应返回列表

{"red","yellow","blue"}

我知道这是一个相当简单的问题,如果已经得到解答,请为我指出正确的方向。另外,我相信这些是逗号分隔的变量。到目前为止,我已经有了标题和扫描仪声明:

public static ArrayList<String>Skip(File file)
ArrayList<String> newList = new ArrayList<String>();
Scanner scanner = new scanner(file);

while(scanner.hasNextLine()){
  *WHAT DO I DO HERE*


 newList.add(____);
 }

scanner.close;
}
return newList;

最佳答案

默认情况下,扫描程序使用空格作为分隔符,但您可以显式设置不同的分隔符。例如

scanner.useDelimiter(",");

要选择替代行,最简单的方法是在循环外部定义一个 boolean 变量,然后对其取反(false -> truetrue -> false) 每次循环。

boolean includeItem = true;

while (...) {
    ...
    includeItem = !includeItem;
}
<小时/>

剧透警告

这是一些将它们组合在一起的代码,并且似乎可以满足您的需要:

public static List<String> alternateItemsFrom(File commaSeparatedFile)
             throws FileNotFoundException {
    List<String> results = new ArrayList<String>();
    boolean includeItem = true;
    try (Scanner scanner = new Scanner(commaSeparatedFile)) {
        scanner.useDelimiter(",");
        while (scanner.hasNext()) {
            String item = scanner.next().trim();
            if (includeItem) {
                results.add(item);
            }
            includeItem = !includeItem;
        }
    }
    return results;
}

另请注意:

  • 当您为文件创建Scanner时,可能会抛出FileNotFoundException。我需要在方法上声明该异常。

  • 尽管您可以在循环后使用 scanner.close() 关闭扫描器,但在 Java 7+ 中,有一种更好的方法,即所谓的 try-with -资源 block 。这可以保证即使在循环时发生异常,扫描仪也会关闭。

  • 我已重命名该方法和一些变量,以尝试更清楚地表达它们的意图。

关于java - 数组列表和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36348925/

相关文章:

python - 搜索文件并找到完全匹配并打印行?

c++ - 如何检查文件是否存在并且在 C++ 中是否可读?

java - 输入字符串并在每次单击按钮时添加到列表中,同时显示输入的所有字符串

java - 优化循环更新请求

java - 管理线程的顺序

c++ - ifstream : how to tell if specified file doesn't exist

android - 单击 listView 时不显示任何消息

java - 让计时器作为 lambda 执行

java - 在匿名类上使用方法

java - 从另一个类调用对象数组列表并迭代它