Java 扫描仪不在空格字符后读取
我有2个来自用户的输入。一个是说Java 扫描仪不在空格字符后读取,java,Java,我有2个来自用户的输入。一个是说问候语,另一个是告诉我你的名字 但是,当我在某件事之后写hello时,ex:hello,伙计扫描仪不读取第二个输入,它是mate,并从第一个字符串获取hello,第二个也是相同的 有什么建议吗 谢谢 public static void main(String[] args) { System.out.println("Choose what would you like to say ?"); String str1 = "";
问候语
,另一个是告诉我你的名字
但是,当我在某件事之后写hello时,ex:hello,伙计代码>扫描仪不读取第二个输入,它是mate
,并从第一个字符串获取hello
,第二个也是相同的
有什么建议吗
谢谢
public static void main(String[] args) {
System.out.println("Choose what would you like to say ?");
String str1 = "";
String str2 = "";
System.out.println("Say any greetings word");
str1 = input();
System.out.println("Tell me your name");
str2 = input();
if (str2.equalsIgnoreCase("zia")) {
System.out.println("Hello Mr Zia, What a nice suprise");
}
else {
System.out.println(str1 + " " + str2);
}
}
public static String input() {
Scanner sc = new Scanner(System.in);
return sc.next();
}
首先,您需要sc.nextLine()
来读取整个输入
第二,你不应该每次都创建一个新的扫描仪。只需像这样重复使用扫描仪:
Scanner sc = new Scanner(System.in);
System.out.println("Say any greetings word");
str1 = sc.nextLine();
System.out.println("Tell me your name");
str2 = sc.nextLine();
如果不再需要,请关闭扫描仪:
sc.close();
这样,您甚至不再需要input()
-方法。首先,您需要sc.nextLine()
来读取整个输入
第二,你不应该每次都创建一个新的扫描仪。只需像这样重复使用扫描仪:
Scanner sc = new Scanner(System.in);
System.out.println("Say any greetings word");
str1 = sc.nextLine();
System.out.println("Tell me your name");
str2 = sc.nextLine();
如果不再需要,请关闭扫描仪:
sc.close();
这样,您甚至不再需要input()
-方法。您不能在同一输入流上构建多个扫描仪。它们会相互冲突,导致您观察到的不一致
如图所示,对方法input()的每次调用都将在唯一的System.in上构建一个新的扫描仪。这是同一输入流上的多个扫描仪。不行
取而代之的是,在程序开始时一次性构建一个扫描仪,并在每次需要读取输入时使用该唯一的扫描仪
像这样:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Choose what would you like to say ?");
System.out.println("Say any greetings word");
String greeting = scanner.next();
System.out.println("Tell me your name");
String name = scanner.next();
if (name.equalsIgnoreCase("zia")) {
System.out.println("Hello Mr Zia, What a nice suprise");
} else {
System.out.println(greeting + " " + name);
}
}
不能在同一输入流上构建多个扫描仪。它们会相互冲突,导致您观察到的不一致
如图所示,对方法input()的每次调用都将在唯一的System.in上构建一个新的扫描仪。这是同一输入流上的多个扫描仪。不行
取而代之的是,在程序开始时一次性构建一个扫描仪,并在每次需要读取输入时使用该唯一的扫描仪
像这样:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Choose what would you like to say ?");
System.out.println("Say any greetings word");
String greeting = scanner.next();
System.out.println("Tell me your name");
String name = scanner.next();
if (name.equalsIgnoreCase("zia")) {
System.out.println("Hello Mr Zia, What a nice suprise");
} else {
System.out.println(greeting + " " + name);
}
}
你想要的是nextLine()而不是next(),为什么每次方法调用都要创建一个新的扫描程序?不要那样做。创建一个并重用它。请注意,next()
只读取下一个标记(分隔符为空格)。您需要读取完整行的nextLine()
(分隔符为换行符)。在提出此类问题之前,请务必阅读方法文档。文档详细解释了该方法,并给出了示例。请参阅。您想要的是nextLine()而不是next()。为什么要在每次方法调用时创建一个新的扫描程序?不要那样做。创建一个并重用它。请注意,next()
只读取下一个标记(分隔符为空格)。您需要读取完整行的nextLine()
(分隔符为换行符)。在提出此类问题之前,请务必阅读方法文档。文档详细解释了该方法,并给出了示例。请参阅。从技术上讲,您几乎不应该调用close()方法,而是让try with resource处理资源的关闭。此外,由于扫描仪是基于System.in构建的,而System.in不是由程序员打开的,而是由平台打开的,因此关闭它是一项值得怀疑的责任。为什么每个人都坚持使用nextLine()?问题很清楚,输入的两部分在同一行。next()是正确的调用。@kumesana查看文档:“查找并返回来自此扫描仪的下一个完整标记。”标记由空格字符分隔。除非另有规定,空格是分隔符。输入是Hello mate!!它是“Hello”,后面跟一个分隔符,后面跟“mate!!”。OP正在按原样使用next()expected@kumesana是的,空格是分隔符。但问题恰恰是扫描仪只读取这个分隔符!我假设OP想要读取整个输入,而不仅仅是第一个单词。从技术上讲,您几乎不应该调用close()方法,而是让try with resource来处理资源的关闭。此外,由于扫描仪是基于System.in构建的,而System.in不是由程序员打开的,而是由平台打开的,因此关闭它是一项值得怀疑的责任。为什么每个人都坚持使用nextLine()?问题很清楚,输入的两部分在同一行。next()是正确的调用。@kumesana查看文档:“查找并返回来自此扫描仪的下一个完整标记。”标记由空格字符分隔。除非另有规定,空格是分隔符。输入是Hello mate!!它是“Hello”,后面跟一个分隔符,后面跟“mate!!”。OP正在按原样使用next()expected@kumesana是的,空格是分隔符。但问题恰恰是扫描仪只读取这个分隔符!我假设OP想要读取整个输入,而不仅仅是第一个单词。