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