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

时间:2016-01-06 23:09:07

标签: java java.util.scanner whitespace joptionpane

我想知道从Scanner.next()和JOprionPane.showInputDialog(“text”)加载的String对象之间的区别是什么;

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

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

我写道,让我们说“Dami an”结果是“Dami”

但是当我使用JOptionPane加载String时:

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

结果是(正如我在前面的例子中预期的那样)“达米安”。

为什么结果不同?

感谢您的帮助:)

最好的问候:D

2 个答案:

答案 0 :(得分:1)

sc.next()只返回一个令牌,因此它只会在您第一次调用它时获得Dami,而不是Dami an。如果您再次致电an,则会获得sc.next()

如果您想立即获得整行,请使用sc.nextLine()

答案 1 :(得分:1)

由于Scanner.next()方法获取Dami的下一个令牌,anDami之后的第二个令牌。

如果您希望以最有效(以性能为导向)的方式阅读整行,您可能希望使用:

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