Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Scanner和JOptionPane加载的字符串之间的差异_Java_Java.util.scanner_Whitespace_Joptionpane - Fatal编程技术网

Java 从Scanner和JOptionPane加载的字符串之间的差异

Java 从Scanner和JOptionPane加载的字符串之间的差异,java,java.util.scanner,whitespace,joptionpane,Java,Java.util.scanner,Whitespace,Joptionpane,我想知道从Scanner.next()和JOprionPane.showInputDialog(“文本”)加载的字符串对象之间有什么区别 当我使用扫描仪时,我的小程序出现问题: Scanner sc = new Scanner(System.in); String s = sc.next(); s = s.replaceAll("\\s+", ""); 我写了,比如说“大米安”,结果是“大米” 但当我使用JOptionPane加载字符串时: String s = JOptionP

我想知道从Scanner.next()和JOprionPane.showInputDialog(“文本”)加载的字符串对象之间有什么区别

当我使用扫描仪时,我的小程序出现问题:

 Scanner sc = new Scanner(System.in);
 String s = sc.next();
 s = s.replaceAll("\\s+", "");
我写了,比如说“大米安”,结果是“大米”

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

    String s = JOptionPane.showInputDialog("Text");
    s = s.replaceAll("\\s+", "");
结果是(正如我在前面的示例中所预期的那样)“Damian”

为什么结果不同

谢谢你的帮助:)

最好的问候:D

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

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

因为
Scanner.next()
方法获取下一个标记,即
Dami
,而
an
是紧跟在
Dami
之后的第二个标记

如果您希望以最高效(性能方面)的方式阅读整行内容,您可能希望使用:

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

查看或扫描下一行,具体取决于您的needs@MadProgrammer
Scanner.nextLine()
在任何情况下都更快吗?我读到它下面有缓冲区,但当我使用扫描仪将数字读入arrray并测量时间时,它总是比
BufferedReader.nextLine()
慢,然后是
String.split()
,然后是
Integer.parseInt()
,这不是一个时间关键问题,解决op问题的最简单解决方案是使用nextLine。我会用扫描仪吗?可能没有,但当我开始使用Java时,它不可用(顺便说一句,我不是在抱怨你的答案,只是在这种情况下,next/nextLine是不同之处)