Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用scanner将文件中的字符串输入拆分为数组_Java_Arraylist_Split - Fatal编程技术网

Java 使用scanner将文件中的字符串输入拆分为数组

Java 使用scanner将文件中的字符串输入拆分为数组,java,arraylist,split,Java,Arraylist,Split,我有一个我正在读取的文本文件,看起来像这样: pizza, fries, eggs. 1, 2, 4. 我正在使用Scanner类扫描这个.txt文件,我想将输入插入ArrayList。我知道有一种方法可以拆分字符串并使用,“作为分隔符,但我似乎找不到如何以及在何处应用此方法。注意:用作其自己的分隔符,以便扫描器知道它需要检查下一行并将其添加到不同的ArrayList中 下面是我在ArrayList设置类中的相应代码: public class GrocerieList { stat

我有一个我正在读取的文本文件,看起来像这样:

pizza, fries, eggs.
1, 2, 4.
我正在使用Scanner类扫描这个.txt文件,我想将输入插入ArrayList。我知道有一种方法可以拆分字符串并使用
,“
作为分隔符,但我似乎找不到如何以及在何处应用此方法。注意:
用作其自己的分隔符,以便扫描器知道它需要检查下一行并将其添加到不同的ArrayList中

下面是我在ArrayList设置类中的相应代码:

public class GrocerieList {

    static ArrayList<String> foodList = new ArrayList<>();
    static ArrayList<String> foodAmount = new ArrayList<>();
}

我在哪里可以分线?怎么做?也许我的方法有缺陷,我需要改变它?非常感谢您的帮助,谢谢

通常,您会保存从
nextLine
方法读取的数据,并使用
split
方法将列表分解为一个数组,然后将其存储到目标。如果需要转换,例如从字符串到整数,请单独进行转换

  String lineContent = scan.nextLine();
  String[] components = lineContent.split(","); //now your array has "pizza", "fries", "eggs" etc.
使用
nextLine()

并使用try with resources正确关闭文件

public static void readFile() throws FileNotFoundException {
    try (Scanner scan = new Scanner(file)) {
        scan.nextLine(); // required because there is one empty line at .txt start
        GrocerieList.foodList.addAll(Arrays.asList(scan.nextLine().replaceFirst("\\.$", "").split(",\\s*")));
        GrocerieList.foodAmount.addAll(Arrays.asList(scan.nextLine().replaceFirst("\\.$", "").split(",\\s*")));
    }
}

最简单的方法是使用String#split。 你也不想要“下一个”,而是下一个

GrocerieList.foodList.addAll(Arrays.asList(scan.nextLine().replaceFirst(\\\.$,“”)).split(“,”)

(应该可以,但没有测试)


有关scanner类的更多信息,请参阅

您是否意识到这只会处理一行数据?啊,是的-我在试图找到解决方案时已多次重写了它。需要调整,但这不是我主要关心的问题,因为这很容易解决。尽管如此,我还是不喜欢发布有缺陷的代码!抱歉并感谢您的提醒(Scott:)这并没有消除结束期间。您是对的,对于那个特定的情况,需要在拆分之前进行预处理,这并没有消除结束期间。您是对的,抱歉忘记了在使用scannersIntellij时没有替换分隔符。Sintellij告诉我它“无法解析方法‘toList’”在“数组”中?@Rebellinho尝试使用asList
!固定的。谢谢,Nexevis。不过,如果我使用asList,它就像一个符咒!谢谢你,安德烈亚斯:)你救了我一天的命——考虑到我要花多长时间才能找到这些信息,这可能也是我周末的一大块时间!干杯-没错!谢谢Nexevis!
public static void readFile() throws FileNotFoundException {
    try (Scanner scan = new Scanner(file)) {
        scan.nextLine(); // required because there is one empty line at .txt start
        GrocerieList.foodList.addAll(Arrays.asList(scan.nextLine().replaceFirst("\\.$", "").split(",\\s*")));
        GrocerieList.foodAmount.addAll(Arrays.asList(scan.nextLine().replaceFirst("\\.$", "").split(",\\s*")));
    }
}