Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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中将多数据类型文件读入ArrayList_Java_Arraylist - Fatal编程技术网

在Java中将多数据类型文件读入ArrayList

在Java中将多数据类型文件读入ArrayList,java,arraylist,Java,Arraylist,我试图读取一个文件,用户输入该文件,该文件包含数字和字符。我只想将数字存储在Arraylist中,但我一直被卡住,非常感谢您的帮助。这就是我所拥有的。很抱歉,如果已经回答了这个问题,我是该网站的新手 import java.util.*; import java.io.*; public class ArrayListClient { public static final int SIZE = 100; public static void main(String[] args)

我试图读取一个文件,用户输入该文件,该文件包含数字和字符。我只想将数字存储在Arraylist中,但我一直被卡住,非常感谢您的帮助。这就是我所拥有的。很抱歉,如果已经回答了这个问题,我是该网站的新手

import java.util.*;
import java.io.*;

public class ArrayListClient {
  public static final int SIZE = 100;

  public static void main(String[] args) throws FileNotFoundException {
    String fileName, fileName2;

    UnorderedArrayList list1 = new UnorderedArrayList(SIZE);

    Scanner input = new Scanner(System.in);
    System.out.print("Please input the name of the file to be opened for the first list: ");
    fileName = input.nextLine();

    System.out.println();
    Scanner inputFile = new Scanner(new File(fileName));
    int num = inputFile.nextInt();

    while(inputFile.hasNextInt()) {
      int num2 = inputFile.nextInt();
      list1.insertEnd(num);
      num = num2;
    }
    list1.print();

 }         
}

输入文件为13 c v b 25 34 x 67 56 10 a 20 27 2 a s 5 1 45 59

您提供的循环是正确的,尽管您不需要while循环之外的这一行:

如果您提供的文件没有整数,那么这将使您的程序崩溃

我认为你可以简单地写下这句话,它应该会起作用:

while (inputFile.hasNextInt()) {
    int num = inputFile.nextInt();
    list1.insertEnd(num);
}

循环检查文件inputFile.hasNextInt中是否还有其他整数,然后将其添加到列表inputFile.nextInt。

您提供的循环是正确的,尽管您不需要while循环之外的这一行:

如果您提供的文件没有整数,那么这将使您的程序崩溃

我认为你可以简单地写下这句话,它应该会起作用:

while (inputFile.hasNextInt()) {
    int num = inputFile.nextInt();
    list1.insertEnd(num);
}

循环检查文件inputFile.hasNextInt中是否还有另一个整数,然后将其添加到列表inputFile.nextInt。

这听起来可能是一个家庭作业问题,所以我不太愿意给出答案,但如果我是你,我会考虑编写一个过滤函数,使它成为一个懒惰的过滤器,如果你必须考虑文件很大/不适合在内存中。您的筛选函数可以尝试Integer.parseIntyourString;并捕获由于试图解析字母而出现的任何NumberFormatException。这种方法有一个明显的危险,就是使用异常来控制通常被认为是不好的做法的程序流,但是您不必遍历列表两次

另一个明显的选择是编写一个过滤器,过滤掉字符,这样只剩下数字字符串,然后对这些数字字符串运行parseInt,将它们转换为整数值。如果性能是一个问题,您可以通过编写函数来避免双重遍历列表,该函数验证单个字符串值,如果它不是数字,则拒绝,如果它是数字,则将其解析为int,然后在进入foreach循环时将解析的整数添加到数组中


由于整数检测内置于Scanner类中,且integer类包含parseInt方法,因此大部分工作已经完成。只需改变一个数组,你可以在每个循环外定义一个数组,这样你就可以去了。

< P>这听起来可能是一个家庭作业问题,所以我很犹豫,只是给出答案,但是如果我是你,我会考虑写一个过滤函数,如果你必须考虑那些非常大的/不适合内存的文件,那它就是一个懒惰的过滤器。您的筛选函数可以尝试Integer.parseIntyourString;并捕获由于试图解析字母而出现的任何NumberFormatException。这种方法有一个明显的危险,就是使用异常来控制通常被认为是不好的做法的程序流,但是您不必遍历列表两次

另一个明显的选择是编写一个过滤器,过滤掉字符,这样只剩下数字字符串,然后对这些数字字符串运行parseInt,将它们转换为整数值。如果性能是一个问题,您可以通过编写函数来避免双重遍历列表,该函数验证单个字符串值,如果它不是数字,则拒绝,如果它是数字,则将其解析为int,然后在进入foreach循环时将解析的整数添加到数组中


由于整数检测内置于Scanner类中,且integer类包含parseInt方法,因此大部分工作已经完成。只要在for each循环之外修改一个数组,就可以了。

如果有疑问,请阅读文档。如果有疑问,请阅读文档。这是我在下面写评论时发布的。这基本上是我试图向您指出的一个示例-使用Scanner类忽略非数字,然后这个示例不使用parseInt,因为我认为nextInt为您将数字解析为int,但如果不是,请知道Integer类在那里。这是在我写下面的评论时发布的。这基本上是我试图向您指出的一个示例-使用Scanner类忽略非数字,然后这个示例不使用parseInt,因为我认为nextInt为您将数字解析为int,但如果不是,请知道Integer类在那里。