Java 为什么我不能用双扫描仪(System.in)阅读整行文字?
这里到底发生了什么? 为什么我不能存储一个名称为空格的字符串? 我试过使用分隔符,但没有成功。有没有一种方法可以产生期望的输出? 我知道.next()可以工作,但我们可能需要存储一个带空格的字符串。只是好奇Java 为什么我不能用双扫描仪(System.in)阅读整行文字?,java,string,Java,String,这里到底发生了什么? 为什么我不能存储一个名称为空格的字符串? 我试过使用分隔符,但没有成功。有没有一种方法可以产生期望的输出? 我知道.next()可以工作,但我们可能需要存储一个带空格的字符串。只是好奇 Scanner input=new Scanner(System.in); System.out.print("Enter number of Students:"); double [] scores = new double[input.nextInt()];
Scanner input=new Scanner(System.in);
System.out.print("Enter number of Students:");
double [] scores = new double[input.nextInt()];
String [] names=new String[scores.length];
for(int i=0;i<names.length;i++){
System.out.println("Enter the students name: ");
names[i] = input.nextLine();
System.out.println("Enter the student scores : ");
scores[i]=input.nextDouble();
}
扫描仪输入=新扫描仪(System.in);
System.out.print(“输入学生人数:”);
double[]分数=新的double[input.nextInt()];
字符串[]名称=新字符串[scores.length];
对于(int i=0;i当您调用input.nextInt()
时,它不会使用该行上的新行字符,因此对input.nextLine();
的以下调用将使用该新行并返回空字符串。nextDouble()
将正常工作
解决此问题的一种方法是在for循环之前立即调用input.nextLine();
,以使用额外的新行字符
编辑:
String[]name=新字符串[scores.length];
input.nextLine();//直接在此处添加调用
对于(int i=0;i,根据:
一个简单的文本扫描器,可以使用正则表达式解析原语类型和字符串。
扫描器使用定界符模式将其输入拆分为标记,默认情况下,定界符模式与空白相匹配。然后,可以使用各种next方法将生成的标记转换为不同类型的值
如果将默认分隔符替换为“\n”会怎样:
Scanner s = new Scanner(input).useDelimiter("\\\\n");
这就是它的工作原理!谢谢大家的关心!:)
for(int i=0;我能告诉我我们怎么做吗?我很高兴看到它工作!)
Scanner s = new Scanner(input).useDelimiter("\\\\n");
for(int i=0;i<names.length;i++){
if(input.nextLine().equals("")){
System.out.println("Enter students name : ");
names[i] = input.nextLine();
}
System.out.println("Enter the student scores : ");
scores[i]=input.nextDouble();
}