我想知道从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
答案 0 :(得分:1)
sc.next()
只返回一个令牌,因此它只会在您第一次调用它时获得Dami
,而不是Dami an
。如果您再次致电an
,则会获得sc.next()
。
如果您想立即获得整行,请使用sc.nextLine()
。
答案 1 :(得分:1)
由于Scanner.next()
方法获取Dami
的下一个令牌,an
是Dami
之后的第二个令牌。
如果您希望以最有效(以性能为导向)的方式阅读整行,您可能希望使用:
try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){
String s = br.readLine();
}catch(IOException e){e.printStackTrace();}