当前位置: 首页 > 面试题库 >

Java Scanner类中的字符串格式

法兴德
2023-03-14
问题内容
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等)将是最一致的。

Java 9

由于Java 9中的错误,(?> ... )必须在换行匹配器周围添加原子分组\R。有关详细信息,请参见错误报告JDK-8176983。

i.skip("((?<!(?>\\R))\\s)*"); // skip whitespace, stopping after any newline
                              // Compatibility Note: Java 9 safe use of \R

此代码也可以正常工作,并且如果用于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


 类似资料:
  • 我的问题是格式化通过扫描仪输入的字符串。我试图输入“Result is”,但printf()似乎只看到字符串的“Result”部分,那么空格的命令是什么呢?thx公司

  • 我有一张这样的地图 我可以得到分数作为整数以及"NA",所以我映射类型为字符串,但在发布数据到索引我得到数字格式异常。 例如: 如果我将第一个数据发布为整数,后跟“NA”。我得到了这些例外。 检查日志文件时,我发现以下错误: [2016-08-29 15:19:01]elasticlog.警告:响应[{\"错误\":{\"root_cause类型\":\"mapper_parsing_except

  • Kotlin有一个很好的特性,叫做字符串模板。我真的很喜欢。 但是否可以在模板中设置任何格式?例如,我想在kotlin中设置字符串模板中的Double格式,至少要在小数分隔符后设置一些位数:

  • 现在的Rust资料,无论是Book还是RustByExample都没有统一而完全的介绍Rust的操作符。一个很重要的原因就是,Rust的操作符号和C++大部分都是一模一样的。 一元操作符 顾名思义,一元操作符是专门对一个Rust元素进行操纵的操作符,主要包括以下几个: -: 取负,专门用于数值类型。 *: 解引用。这是一个很有用的符号,和Deref(DerefMut)这个trait关联密切。 !:

  • 问题内容: 下面是我以前如何将浮点数截断到两位小数 我检查了文档和电子书,但无法弄清楚。谢谢! 问题答案: 根据David的回答,到目前为止,我最好的解决方案是 我认为这是最类似于Swift的解决方案,将格式化操作直接与数据类型相关联。可能是某处有一个内置的格式化操作库,或者它可能很快就会发布。请记住,该语言仍处于测试阶段。

  • 问题内容: 我想知道使用模板字符串而不是新的高级字符串格式是否有优势? 问题答案: 模板要比通常的字符串格式更简单,但会降低表达力。PEP 292 的基本原理将模板与Python的-style字符串格式进行了比较: Python当前支持基于C的‘%’格式字符的字符串替换语法。尽管格式非常丰富,但即使对于有经验的Python程序员,%格式的代码也容易出错。一个常见的错误是忽略了尾随的格式字符,例如i