Java next()和nextLine()都不帮助用空格存储名称
我目前正在使用扫描仪记录用户输入的字符串并打印出来。如果用户输入的是单个名称,如Alan,则可以正常工作。如果我输入一个带有空格的名称,比如Alan Smith,它会返回一个错误,称为InputMisMatchException 我在这里阅读了类似的案例,他们建议使用nextLine()而不是next()。这是有道理的,但对我来说也不行。当我使用nextLine()时,它会立即跳过输入名称的步骤,并返回到循环的开始,要求我再次输入选项。请建议我如何纠正这一点。多谢各位Java next()和nextLine()都不帮助用空格存储名称,java,java.util.scanner,Java,Java.util.scanner,我目前正在使用扫描仪记录用户输入的字符串并打印出来。如果用户输入的是单个名称,如Alan,则可以正常工作。如果我输入一个带有空格的名称,比如Alan Smith,它会返回一个错误,称为InputMisMatchException 我在这里阅读了类似的案例,他们建议使用nextLine()而不是next()。这是有道理的,但对我来说也不行。当我使用nextLine()时,它会立即跳过输入名称的步骤,并返回到循环的开始,要求我再次输入选项。请建议我如何纠正这一点。多谢各位 import java.i
import java.io.IOException;
import java.util.Scanner;
public class ScannerTest {
static String name;
static Scanner in = new Scanner(System.in);
static int choice;
public static void main(String[] args) {
while(choice != 5){
System.out.print("\nEnter Choice :> ");
choice = in.nextInt();
if(choice == 1){
try{
printName();
}
catch(IOException e){
System.out.println("IO Exception");
}
}
}
}
private static void printName()throws IOException{
System.out.print("\nEnter name :> ");
name = in.next();
//name = in.nextLine();
if (name != null){
System.out.println(name);
}
}
}
试试这个:在.nextLine()中添加
name=in代码>在choice=in.nextInt()之后代码>
然后尝试替换.next()中的name=in
与name=in.nextLine()代码>
说明:在扫描程序调用nextInt()
后,它将获取第一个值,并将字符串的其余部分留给\n
。然后使用nextLine()
使用字符串的其余部分
然后,第二个nextLine()
用于获取字符串参数。问题很简单:当提示用户输入其选择时,选择将是一个int
,后跟一个新行(用户将按enter键)。当您在.nextLine()中使用检索选项时,只会使用数字,新行仍将在缓冲区中,因此,当您在.nextLine()中调用时,您将得到数字和新行之间的任何内容(通常为零)
您需要做的是在读取数字后立即调用.nextLine()中的,
,以清空缓冲区:
choice = in.nextInt();
if (in.hasNextLine())
in.nextLine();
在调用name=in.next()之前代码>执行此操作in=新扫描仪(System.in)代码>
对象需要重新生成自身,因为它已具有值。
祝你好运我不太明白为什么这个答案得了-1分。它实际上是有效的,但是正在思考为什么它有助于清除错误。添加了一个解释。