Java 从用户输入获取文件并将整数存储到数组中

Java 从用户输入获取文件并将整数存储到数组中,java,arrays,file,methods,return,Java,Arrays,File,Methods,Return,我试图从java中的用户输入打开一个文件,然后读取该文件,只获取每行中的整数,然后将其放入数组并返回数组。在抓取文件中的项目方面,我更熟悉python而不是java 一行中的文件内容示例: 34 a 55 18 47 89 b 45 67 59 Abbb 88 37 20 27 10 78 39 n m ghff 我的代码: private static int[] getArray(){ List<Integer> temp = new ArrayList<Integ

我试图从java中的用户输入打开一个文件,然后读取该文件,只获取每行中的整数,然后将其放入数组并返回数组。在抓取文件中的项目方面,我更熟悉python而不是java

一行中的文件内容示例:

34 a 55 18 47 89 b 45 67 59 Abbb 88 37 20 27 10 78 39 n m ghff

我的代码:

private static int[] getArray(){
    List<Integer> temp = new ArrayList<Integer>();
    System.out.print("Please input the name of the file to be opened: ");
    try{
        String filename = in.next();
        File file = new File(filename);
        Scanner inputFile = new Scanner(file);
        while (inputFile.hasNextInt()){
            temp.add(inputFile.nextInt());
        }
    } catch (FileNotFoundException e){
        System.out.println("---File Not Found! Exit program!---");
        System.exit(0);
    }
    int[] array = new int[temp.size()];
    for (int i = 0; i < array.length; i++){
        array[i] = temp.get(i);
    }
    return array;
}

在您的情况下,我不会使用Scanner对象来获取int值,因为当您使用Scanner时,只有当您具有EOF(文件结尾)字符时,
hasNext()
才会获得
false
。 因此,一旦检索到
文件名
,请使用下面的代码,这将消除给定字符串中的所有字符,并将其替换为单个
空白

String stringWithSingleWS = filename.trim().replaceAll("([a-zA-Z])"," ").replaceAll("\\s{2,}"," ");
然后,您可以将其解析为数组并直接返回结果,而无需转换为列表对象变量

    int[] values = java.util.Arrays.stream(stringWithSingleWS.split(" "))
                    .mapToInt(Integer::parseInt)
                    .toArray();
return values;

在您的情况下,我不会使用Scanner对象来获取int值,因为当您使用Scanner时,只有当您具有EOF(文件结尾)字符时,
hasNext()
才会获得
false
。 因此,一旦检索到
文件名
,请使用下面的代码,这将消除给定字符串中的所有字符,并将其替换为单个
空白

String stringWithSingleWS = filename.trim().replaceAll("([a-zA-Z])"," ").replaceAll("\\s{2,}"," ");
然后,您可以将其解析为数组并直接返回结果,而无需转换为列表对象变量

    int[] values = java.util.Arrays.stream(stringWithSingleWS.split(" "))
                    .mapToInt(Integer::parseInt)
                    .toArray();
return values;

这回答了你的问题吗?这回答了一部分,但我仍然得到0的返回,因为它似乎没有读取整数的文件。这回答了你的问题吗?这回答了一部分,但我仍然得到了0的返回,因为它似乎没有读取整数的文件。我尝试了这样做,但仍然得到了0的返回。这与我的while循环没有实际获取整数值有关吗?这对测试用例不起作用
34a 55 18 47 89 b 45 67 59 abbb 88 37 20 27 10 78 39 21 n m ghff
检查答案,我根据您的案例对其进行了改进。我尝试了这样做,但仍然得到了0的返回。这与我的while循环没有实际获取整数值有关吗?这对测试用例不起作用
34a 55 18 47 89 b 45 67 59 abbb 88 37 20 27 10 78 39 21 n m ghff
检查答案,我根据您的案例改进了它。