Java 从Scanner和JOptionPane加载的字符串之间的差异
我想知道从Scanner.next()和JOprionPane.showInputDialog(“文本”)加载的字符串对象之间有什么区别 当我使用扫描仪时,我的小程序出现问题: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 sc = new Scanner(System.in);
String s = sc.next();
s = s.replaceAll("\\s+", "");
我写了,比如说“大米安”,结果是“大米”
但当我使用JOptionPane加载字符串时:
String s = JOptionPane.showInputDialog("Text");
s = s.replaceAll("\\s+", "");
结果是(正如我在前面的示例中所预期的那样)“Damian”
为什么结果不同
谢谢你的帮助:)
最好的问候:Dsc.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是不同之处)