Yur*_*ivi 3 java string formatting
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);
Run Code Online (Sandbox Code Playgroud)
我的问题是格式化通过扫描仪输入的字符串。我试图输入“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();
Run Code Online (Sandbox Code Playgroud)
如果需要,此方法允许您在一行上输入所有输入。
例如:
1 1.2 结果是
但是,如果您确实想让用户在每次输入后按下Enter,那么使用 Scanner 的 nextLine() 方法读取所有输入,然后根据需要进行解析(使用 Integer.parseInt 等)将是最一致的。
爪哇9
由于 Java 9 中的错误,(?> ... )必须在换行匹配器周围添加原子分组\R。有关详细信息,请参阅错误报告JDK-8176983。
i.skip("((?<!(?>\\R))\\s)*"); // skip whitespace, stopping after any newline
// Compatibility Note: Java 9 safe use of \R
Run Code Online (Sandbox Code Playgroud)
如果用于 Java 8,此代码也可以正常工作,不会导致任何问题,因此实际上我建议您在代码中使用此解决方法版本,只是为了安全起见(例如,如果有人可能复制/粘贴或将目标设置为不同的目标) JDK)。
Java 7 及更早版本
换行符匹配器\R在 Java-8 或更高版本中可用。在该版本之前,您必须使用“等效”模式\u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029],但是要作为真正的等效模式工作,它实际上必须包装在原子分组中(?> ... )。有关详细信息,请参阅文档错误报告JDK-8176029。
i.skip("((?<!(?>\\u000D\\u000A|[\\u000A\\u000B\\u000C\\u000D\\u0085\\u2028\\u2029]))\\s)*"); // skip whitespace, stopping after any newline
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9332 次 |
| 最近记录: |