Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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 返回空白的命令行_Java_Arrays_Input_Java.util.scanner - Fatal编程技术网

Java 返回空白的命令行

Java 返回空白的命令行,java,arrays,input,java.util.scanner,Java,Arrays,Input,Java.util.scanner,输入要处理的文件后,命令行跳到下一行,但保持空白,而不是打印所需的数组。我想调用getInputScanner方法来生成访问文件的扫描仪,在用户输入文件后,命令行跳转到下一行,而不是处理任何文本。你知道为什么吗 import java.util.*; import java.awt.*; import java.io.*; public class Test { public static void main(String [] args) { Scanner c

输入要处理的文件后,命令行跳到下一行,但保持空白,而不是打印所需的数组。我想调用getInputScanner方法来生成访问文件的扫描仪,在用户输入文件后,命令行跳转到下一行,而不是处理任何文本。你知道为什么吗

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


public class Test {
   public static void main(String [] args) { 

      Scanner console = new Scanner(System.in);

      Scanner input = getInputScanner(console);

      System.out.println("{" + nameArr(input) + "}");

   }

   public static Scanner getInputScanner(Scanner console) {

      System.out.print("Please enter a file to process: ");
      File file = new File(console.next());
      while (!file.exists()) {
         System.out.print("\nFile does not exists.\nPlease enter a new file name: ");
         file = new File(console.next());
      }
      try {
         Scanner fileScanner = new Scanner(file);
         return fileScanner;
      } catch (FileNotFoundException e) {
         System.out.println("File not found");
        }
      return null;
    }

   public static String [] nameArr(Scanner input) {

      int count = 0;
      while (input.hasNextLine()) {
         count++;
      }

      String [] nameArray = new String[count];

      while (input.hasNextLine()) {

         String line = input.nextLine();

         for (int i = 0; i < nameArray.length; i++) {
            nameArray[i] = lineProcess(input.nextLine());
         }
      }
      return nameArray;
   }

   public static String lineProcess(String line) {
      Scanner lineScan = new Scanner(line);

      String line2 = lineScan.nextLine();

      String lineString[] = line2.split(" ");

      String name = lineString[0];

      return name;

   }


}
由于未推进扫描仪调用input.nextLine,因此您已创建了“无限循环”和“无限循环”:

如果我发现代码的其他部分有问题,请尝试使用java.util.List而不是数组来收集处理文件行中的名称:

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

public class Test {

    public static void main(String [] args) { 

        Scanner console = new Scanner(System.in);

        Scanner input = getInputScanner(console);

        List<String> nameList = nameArr(input);
        for(String name : nameList){
            System.out.println("{ "+ name  + " } ");
        }

    }

    public static Scanner getInputScanner(Scanner console) {

        System.out.print("Please enter a file to process: ");
        File file = new File(console.next());
        while (!file.exists()) {
            System.out.print("\nFile does not exists.\nPlease enter a new file name: ");
            file = new File(console.next());
        }
        try {
            Scanner fileScanner = new Scanner(file);
            return fileScanner;
        } catch (FileNotFoundException e) {
            System.out.println("File not found");
        }
        return null;
    }

    public static List<String> nameArr(Scanner input) {

        List<String> nameList = new ArrayList<String>();

        while (input.hasNextLine()) {
            nameList.add(lineProcess(input.nextLine()));
        }
        return nameList;
    }

    public static String lineProcess(String line) {

        return line.split(" ")[0];

    }
}

为什么呢input.hasNextLine不会对在getInputScanner中输入的整个文件进行计数,然后计数将等于文件中的行数?如果不提前扫描程序调用nextLine,hasNextLine方法将始终返回true。@LeSexyNinja我编辑我的答案以建议可能的替代方法。数组的长度是恒定的,如果您想使用and数组,最好使用java.util.List:您必须扫描文件两次,第一次是对行进行计数,第二次是逐行分析并将结果放入数组位置。好的,我找不到数组的答案以及如何扫描两次。如何扫描两次?
import java.util.*;
import java.io.*;

public class Test {

    public static void main(String [] args) { 

        Scanner console = new Scanner(System.in);

        Scanner input = getInputScanner(console);

        List<String> nameList = nameArr(input);
        for(String name : nameList){
            System.out.println("{ "+ name  + " } ");
        }

    }

    public static Scanner getInputScanner(Scanner console) {

        System.out.print("Please enter a file to process: ");
        File file = new File(console.next());
        while (!file.exists()) {
            System.out.print("\nFile does not exists.\nPlease enter a new file name: ");
            file = new File(console.next());
        }
        try {
            Scanner fileScanner = new Scanner(file);
            return fileScanner;
        } catch (FileNotFoundException e) {
            System.out.println("File not found");
        }
        return null;
    }

    public static List<String> nameArr(Scanner input) {

        List<String> nameList = new ArrayList<String>();

        while (input.hasNextLine()) {
            nameList.add(lineProcess(input.nextLine()));
        }
        return nameList;
    }

    public static String lineProcess(String line) {

        return line.split(" ")[0];

    }
}