java从控制台读取数据,使用while(scanner.hasNextLine()){}循环体时,无法结束循环的问题

您所在的位置:网站首页 怎么输入下一行的数字 java从控制台读取数据,使用while(scanner.hasNextLine()){}循环体时,无法结束循环的问题

java从控制台读取数据,使用while(scanner.hasNextLine()){}循环体时,无法结束循环的问题

2024-07-06 17:13| 来源: 网络整理| 查看: 265

当需要从控制台中读取数据时,发现当使用while(scanner.hasNextLine()){}时,发现无法结束循环体。在网上找了一下原因。说是因为System.in的数据流还没有关闭,所以scanner会一直等在下一行的数据的到来,所以不管回车键按了多少次都不会跳出循环体。

public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); StringBuilder sb = new StringBuilder(); while(scanner.hasNextLine()){ //按照api上说的,还有下一行的时候就会返回true, //那应该其他情况返回的是false;但是当多次回车之后,循环体还是不会退出。 String s = scanner.nextLine(); sb = sb.append(s); } System.out.p } System.out.println(sb.toString());//这句话永远不会的被执行。 }

那么怎样改进呢?大致有两种方式; 1、在循环体内增加判断条件,在内部控制跳出循环体。但是这种方法需要连续按两次回车键才能结束循环体。

public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); StringBuilder sb = new StringBuilder(); while(scanner.hasNextLine()){ String s = scanner.nextLine(); if(s.equals("")) break;//""里面没有空格号;这里的equals也不能换成==; sb = sb.append(s); } System.out.println(sb.toString()); } } 运行结果: sfgfgdfgd sdfsgdfds //这里需要两次回车键 sfgfgdfgdsdfsgdfds

2、当使用的是hasNext()一系列的方法时,可以增加结束符来控制循环体的结束:

public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); StringBuilder sb = new StringBuilder(); while(!scanner.hasNext("#")){ //这个控制符如果使用$,居然也不会跳出循环体,我也不知道为啥。 String s = scanner.next(); sb = sb.append(s); } System.out.println(sb.toString()); } } 运行结果: sfsdfsg sfsdgg sfsgggf sfs # sfsdfsg sfsdgg sfsgggf sfs


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3