我无法通过命令行解析文件作为输入,以解决以下问题。
考虑两个关于学生的文件,分别包含他们的姓名和密码,姓名和电子邮件地址。人们可能希望将这些组合起来以获得单个文件(按字母顺序),包括姓名,电子邮件和密码。
输入将通过STDIN进入,并具有以下格式:
NUMBER OF RECORDS
NAME1 FIELD1
NAME2 FIELD1
...
NAMEN FIELD1
NAME1 FIELD2
NAME2 FIELD2
...
NAMEN FIELD2
您的输出应采用以下形式:
NAME1' FIELD1 FIELD2
NAME2' FIELD1 FIELD2
...
NAMEN' FIELD1 FIELD2
输出被排序的位置(因此是')。 因此,例如,给出以下输入:
3
a 1
c 2
b 3
b 4
c 5
a 6
您的程序应提供以下输出:
a 1 6
b 3 4
c 2 5
我的代码如下:
import java.util.*;
import java.io.*;
public class Combiner
{
public static void main(String[] args) throws IOException
{
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
Scanner scanner = new Scanner(System.in);
//first line number of students
int numOfStudents = scanner.nextInt();
scanner.nextLine();
// ins1 is the array of inputs of name and UN
String[] ins1 = new String[numOfStudents];
//ins2 is the array of inputs of name and Password
String[] ins2 = new String[numOfStudents];
//collect all inputs of Student Name, UN
for (int i = 0; i < numOfStudents; i++)
{
ins1[i] = stdin.readLine();
}
//collect all inputs of Student Name, Password
for (int i = 0; i<numOfStudents; i++)
{
ins2[i] = stdin.readLine();
}
//sort both arrays
Arrays.sort(ins1);
Arrays.sort(ins2);
for(int i =0; i<numOfStudents; i++)
{
//gets the last word from each element of ins2
String toAdd = getLast(ins2[i]);
//concats that to each element of ins 1
ins1[i]= ins1[i] + " " + toAdd;
}
//print the result
for(int i =0; i<numOfStudents; i++)
{
System.out.println(ins1[i]);
}
}
public static String getLast(String x)
{
//splits x into an array of words seperated by a space
String[] split = x.split(" ");
//gets the last element in that array
String lastWord = split[split.length - 1];
return lastWord;
}
}
从命令行输入时,我得到了所需的输出。但是当我使用对C:\ Users \ Stephen \ Documents \ 3这样的文件的引用时,这只是一个包含
的文件3
a 1
c 2
b 3
b 4
c 5
a 6
抛出异常
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.ThrowFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Combiner.main(Combiner.java.10)
第10行是
int numOfStudents = scanner.nextInt();
我不知道它有什么问题,当通过我的IDE或命令行的控制台单独添加每一行时,它会起作用
答案 0 :(得分:0)
您能否分享一下显示您尝试提供文件名的代码?据我所知,代码的第一部分是:
scanner.nextInt();
哪个不会从文件中读取,它正在等待用户输入。另外,我没有看到你在哪里或如何从文件中读书,也许我错过了它?
好的,所以下面第1行正在创建InputStream
,然后使用FileInputStream
从指定的文件中读取。
第2行正在使用BufferedReader
和InputStreamReader
将{1}}从第1行分配给变量InputStream
。
第3行就是这样你有一个空字符串用于在读取每行时保存它们。
第4-6行包含一个stdin
循环,它使用while
从文件中读取每一行。读取每一行时,会将其分配给stdin.readLine()
变量,如果内容不是line
,则会进入null
循环并尝试输出该行。在while
循环内部,您可以在文件中的每一行上执行其他处理。我希望这会有所帮助,我会稍微回顾一下!
while
好的,您希望用户提供文件名吗?尝试在上面提供的代码上面添加这个。然后替换FileInputStream中的路径以使用变量InputStream is = new FileInputStream("C:\\Users\\Stephen\\Documents\\3");
BufferedReader stdin = new BufferedReader(new InputStreamReader(is));
String line = "";
while((line = stdin.readLine()) != null) {
System.out.println(line);
}
。
fileName