这是我的代码:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String question;
question = in.next();
if (question.equalsIgnoreCase("howdoyoulikeschool?") )
/* it seems strings do not allow for spaces */
System.out.println("CLOSED!!");
else
System.out.println("Que?");
当我试着写“你喜欢上学怎么样?”答案总是“阙?”但它的工作正常,因为“howdoyoulikeschool?”
我应该将输入定义为String以外的其他内容吗?
答案 0 :(得分:9)
in.next()
将返回以空格分隔的字符串。如果您想阅读整行,请使用in.nextLine()
。阅读完字符串后,使用question = question.replaceAll("\\s","")
删除空格。
答案 1 :(得分:1)
而不是
Scanner in = new Scanner(System.in);
String question;
question = in.next();
输入
Scanner in = new Scanner(System.in);
String question;
question = in.nextLine();
这应该可以将空格作为输入。
答案 2 :(得分:1)
这是在java中获取输入的示例实现,我在工资字段中添加了一些容错,以显示它是如何完成的。如果你注意到,你还必须关闭输入流..享受:-)
/* AUTHOR: MIKEQ
* DATE: 04/29/2016
* DESCRIPTION: Take input with Java using Scanner Class, Wow, stunningly fun. :-)
* Added example of error check on salary input.
* TESTED: Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2)
*/
import java.util.Scanner;
public class userInputVersion1 {
public static void main(String[] args) {
System.out.println("** Taking in User input **");
Scanner input = new Scanner(System.in);
System.out.println("Please enter your name : ");
String s = input.nextLine(); // getting a String value (full line)
//String s = input.next(); // getting a String value (issues with spaces in line)
System.out.println("Please enter your age : ");
int i = input.nextInt(); // getting an integer
// version with Fault Tolerance:
System.out.println("Please enter your salary : ");
while (!input.hasNextDouble())
{
System.out.println("Invalid input\n Type the double-type number:");
input.next();
}
double d = input.nextDouble(); // need to check the data type?
System.out.printf("\nName %s" +
"\nAge: %d" +
"\nSalary: %f\n", s, i, d);
// close the scanner
System.out.println("Closing Scanner...");
input.close();
System.out.println("Scanner Closed.");
}
}
答案 3 :(得分:0)
由于很长一段时间以及人们一直建议使用Scanner#nextLine()
,因此Scanner
可以在输入中包含空格。
扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。
您可以使用Scanner#useDelimiter()
将Scanner
的分隔符更改为其他模式,例如line feed
或其他模式。
Scanner in = new Scanner(System.in);
in.useDelimiter("\n"); // use LF as the delimiter
String question;
System.out.println("Please input question:");
question = in.next();
// TODO do something with your input such as removing spaces...
if (question.equalsIgnoreCase("howdoyoulikeschool?") )
/* it seems strings do not allow for spaces */
System.out.println("CLOSED!!");
else
System.out.println("Que?");
答案 4 :(得分:0)
我今天在Java中发现了一件很奇怪的事情,所以它就像-
如果您从用户那里输入了1个以上的内容,请说
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
double d = sc.nextDouble();
String s = sc.nextLine();
System.out.println(i);
System.out.println(d);
System.out.println(s);
因此,如果我们运行此程序,它将看起来像这3个输入,并说我们的输入值为10、2.5,“欢迎使用Java” 程序应该按原样打印这3个值,因为我们已经使用nextLine()了,所以它不应忽略在变量 s
中输入空格后的文本。但是,您将获得的输出是-
10
2.5
就是这样,它甚至不提示输入String。 现在我正在阅读它,说实话,我的理解仍然存在一些差距,我所能发现的是,在接受int输入之后,当我们按Enter键时输入了double输入,它认为是提示,而忽略了nextLine()。
因此将我的代码更改为类似的内容-
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
double d = sc.nextDouble();
sc.nextLine();
String s = sc.nextLine();
System.out.println(i);
System.out.println(d);
System.out.println(s);
可以很好地完成这项工作,因此它与上一个示例中存储在键盘缓冲区中的“ \ n”之类的东西有关,我们可以使用它来绕过它。
如果有人知道,请帮我解释一下。