Java Scanner类中的字符串格式
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);
我的问题是格式化我通过扫描仪输入的字符串。 我试图输入“Result is”,但是printf()似乎只看到字符串的“Result”部分,那么空格命令是什么? 谢谢
有几种可能的解决方案,但我相信以下内容将为您提供与其他输入一致的行为:
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();
如果需要,此方法允许您在一行中输入所有输入。
例如:
1 1.2结果是
但是,如果您确实希望用户在每次输入后按Enter键 ,那么使用Scanner的nextLine()方法读取所有输入,然后根据需要解析(使用Integer.parseInt等)将是最一致的。
笔记:
- linebreak matcher
\R
在Java-8或更高版本中可用。 在该版本之前,您必须使用“等效”模式\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
- 添加了primefaces分组
(?> ... )
以实现Java-9兼容性。 有关详细信息,请参阅错误报告JDK-8176029 。
好吧,你可以做出这样的伎俩,只需添加新的字符串ang打印
String str=i.next(); String strNew=str;
我的问题是格式化我通过扫描仪输入的字符串。 我试图输入“结果是”,但printf()似乎只看到字符串的“结果”部分
改变这个:
String str=i.next();
对此:
String str=i.nextLine();
next()
只返回空格之前的内容。 另一方面, nextLine()
返回包含单词之间空格的输入。
我甚至在几天前遇到了这个问题,在我要求输入int或double之后我不得不输入一个新行。 我用这个来解决它 –
int j=scan.nextInt(); double f=scan.nextDouble(); scan.skip("\n"); String str=scan.nextLine();
“scan是我的Scanner对象的名称”。
看,这里我使用了scan.skip("\n);
因为当你输入一个数字时它只消耗那个数字而不是行尾。因此, scan.skip("\n")
跳过仍然存在的那一行。缓冲区因此,当我们再次扫描时,它从一个新行开始,我们得到所需的字符串。希望它有所帮助!