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")跳过仍然存在的那一行。缓冲区因此,当我们再次扫描时,它从一个新行开始,我们得到所需的字符串。希望它有所帮助!