java - 替换不必要的 scan.nextLine(); 的更好方法找到 StdIn 字符串?

标签 java string java.util.scanner stdin

我一直在解决 HackerRank 问题,并在向任何社区寻求帮助之前始终尝试研究解决方案。虽然我设法让当前的代码正常工作,但我觉得其中涉及一些不必要的代码,并且有人可以教我如何做得更好,因为我不想仅仅因为它有效就养成一个坏习惯。

在本课 HackRank 30 天代码(第 2 天)中,我们被要求从 Stdin 读取 3 行(一个 Int、一个 Double 和一个 String),并使用扫描仪读取它们、保存它们并操作它们。

    Scanner scan = new Scanner(System.in);

    /* Declare second integer, double, and String variables. */
    int myI = scan.nextInt();
    double myDouble = scan.nextDouble();
    scan.nextLine();
    String myString = scan.nextLine();

扫描 Int 和 Double 很容易,但是当我尝试扫描 String 时遇到了一些问题:

A) 如果我使用 scan.next();我返回了一个单词而不是完整的字符串。

B) 如果我使用 scan.nextLine();我得到了一个空行。

经过一番研究,我发现有人建议这样做,因为我刚刚做了 scan.nextDouble();扫描.nextLine();只是简单地读取该行末尾的空白(这对我来说没有多大意义),并且如果我添加额外的“scan.nextLine();”在声明我的字符串之前它应该可以工作。

果然是这样。我真的不明白为什么,而且肯定感觉这不是解决这个问题的正确方法。看来如果我必须频繁这样做,只会使代码变得臃肿?

谁能解释一下:

1) 为什么 scan.nextLine();在我额外添加一个之前返回空白?

2)是否有更好的方法从扫描中定位字符串?

最佳答案

scan.nextLine() 返回直到下一个换行符或\n 之前的所有内容。

所以,我假设输入看起来像这样:

1 2.5
whatever

所以,这个字符串实际上在第一行和第二行之间有一个下一行分隔符。以前,当您没有额外的 nextLine() 时,您的字符串会被分配给一个空字符串,因为它正在消耗下一行分隔符。

额外的 nextLine() 消耗了不需要的下一行分隔符,因此您的字符串可以分配给您想要的内容。

关于java - 替换不必要的 scan.nextLine(); 的更好方法找到 StdIn 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466878/

相关文章:

Java Scanner - 下一个 String 直到 |被发现

Java 的 Scanner 仅在输入 EOF 后才读取

java - Do-While 循环中的 Switch 语句不退出

java - 当我调用 from 方法时,servlet 不会调用

java - Slick2D 如何将 PNG 分配给变量

php - 我正在尝试为每个注册用户创建一个数据库表。我究竟做错了什么?

javascript - 如何批量删除字符串中所有不需要的字符?

java - OSX - 编译 Java JNI 应用程序以仅在安装 JRE 的情况下运行

java - 在 Spark 中将时间戳转换为纪元 (Java)

java - 在java中将字符串转换为mac地址格式