从 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()
方法获取下一个标记 Dami
,an
是 Dami
之后的第二个标记。
如果您希望以最有效的方式(performance-wise)读取整行,您可能希望使用:
try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){
String s = br.readLine();
}catch(IOException e){e.printStackTrace();}
我想知道从 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()
方法获取下一个标记 Dami
,an
是 Dami
之后的第二个标记。
如果您希望以最有效的方式(performance-wise)读取整行,您可能希望使用:
try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))){
String s = br.readLine();
}catch(IOException e){e.printStackTrace();}