【问题标题】:Read multiple word strings with java.util.Scanner() [duplicate]使用 java.util.Scanner() 读取多个字符串 [重复]
【发布时间】:2013-12-10 00:41:15
【问题描述】:

我想使用 java.util.Scanner() 从控制台读取全名并将该值分配给字符串。

例如;

在控制台中输入“John Smith”。点击返回和 字符串 s = "约翰·史密斯";

我尝试编写一个 readString 方法来执行此操作,但它的循环被锁定。有谁知道解决方案吗?

我的部分代码。

System.out.println("Name: ");
String name = readString();

还有我的破方法。

private String readString()
{
    String s ="";
    while(scanner.hasNext())
    s += scanner.next();   
    return s;
} 

【问题讨论】:

  • 以为你打错了,但应该是scanner.hasNext()
  • 打错了,否则他的程序将无法编译。
  • 那不应该永远循环。你确定是readString() 卡住了吗?请向我们展示更多代码。
  • 我在一行输入“John Smith”。点击输入光标跳到下一行并继续读取输入,扫描仪永远不会退出。
  • 标记为重复,但解决方案似乎有所不同。扫描仪对象在代码的前面用于首先读取一些整数。后来我尝试使用相同的扫描仪 .nextLine 方法来读取名称。我第一次调用 .nextLine 时,它​​以空字符串的形式返回。仍然不确定为什么,但使用新的扫描仪实例已经解决了这个问题。因此,在这种情况下,“重复”解决方案将不起作用。

标签: java input console


【解决方案1】:

使用nextLine() 方法代替next()

这样做

private String readString()
{
    Scanner scanner = new Scanner(System.in);
    return scanner.nextLine();
} 

【讨论】:

  • 有一个readString() 方法有点矫枉过正,因为scanner.nextLine(); 只有一行,你不觉得吗?
  • @Sionnach733 感谢您的建议,我同意这一点,但我不想混淆 OP 的
  • 我正在使用一个扫描仪实例从控制台读取多行。使用scanner.nextLine() 为第一行返回一个空字符串,然后正常工作。上面的solution已经解决了这个问题。为每次读取创建一个新实例,它可以正常工作。感谢大家的帮助。
  • @DaveCarruthers 不客气。
【解决方案2】:

这可能对你有帮助

public static void main(String[] args) {
    System.out.println("Name: "+getInput());
}

private static String getInput() {
    Scanner scanner = new Scanner(System.in);
    return scanner.nextLine();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多