Scanner i=new Scanner(System.in);
System.out.println("Enter an integer: ");
int in=i.nextInt();
System.out.println("Enter an floating point number: ");
double d=i.nextDouble();
System.out.println("Enter a string: ");
String str=i.next();
System.out.printf("%s%n,Sum of%2d and %.2f is %.2f%n",str,in ,d,in+d);
My problem is with formatting the String I enter through Scanner. I was trying to enter "Result is", but printf() seems to see only the "Result" part of string, so what is the command for blank space? thx
解决方案
There are several possible solutions, but I believe the following will give you consistent behavior with the other inputs:
System.out.println("Enter an floating point number: ");
double d = i.nextDouble();
i.skip("((?\\R))\\s)*"); // skip whitespace, stopping after any newline
System.out.println("Enter a string: ");
String str = i.nextLine();
This approach would allow you to enter all the inputs on a single line, if so desired.
For example:
1 1.2 Result is
However if you really intend for your users to press Enter after every input, then it would be most consistent to read all the inputs with Scanner's nextLine() method, then parse as needed (using Integer.parseInt, etc).
Notes:
The linebreak matcher \R is available in Java-8 or later. Prior to that version, you would have to use the "equivalent" pattern \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
The atomic grouping (?> ... ) was added for future compatibility. See bug report JDK-8176029 for details.