从 Scanner 和 JOptionPane 加载的字符串之间的区别

Difference between String loaded from Scanner and JOptionPane

我想知道从 Scanner.next() 和 JOprionPane.showInputDialog("text");

加载的字符串对象有什么区别

当我使用 Scanner 时,我的小程序出现问题:

 Scanner sc = new Scanner(System.in);
 String s = sc.next();
 s = s.replaceAll("\s+", "");

然后我写了,假设 "Dami an" 结果是 "Dami"

但是当我使用 JOptionPane 加载字符串时:

    String s = JOptionPane.showInputDialog("Text");
    s = s.replaceAll("\s+", "");

结果是(正如我在前面的例子中预期的那样)"Damian"。

为什么结果不同?

感谢您的帮助:)

问候 :D

sc.next() 只有 returns 一个标记,所以它只会在你第一次调用它时得到 Dami,而不是 Dami an。如果您再次调用 sc.next(),您将获得 an

如果您想一次获取整行,请使用sc.nextLine()

因为 Scanner.next() 方法获取下一个标记 DamianDami 之后的第二个标记。

如果您希望以最有效的方式(performance-wise)读取整行,您可能希望使用:

try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){
String s = br.readLine();
}catch(IOException e){e.printStackTrace();}