首页 > 代码库 > 第二次上课坑点(有关Scanner in中的nextLine(),,next,,以及nextInt()使用注意)

第二次上课坑点(有关Scanner in中的nextLine(),,next,,以及nextInt()使用注意)

有时候上课的一个bug能把你急死。。。。。。。。

PS:Java里面好像真的没有类似C之中的getchar函数可以一次只读一个字符的函数,下次不要再查了直接读串直接处理好了。。。。

1.nextLine()  与next()的区别与不同

**两个都是用来接收用户的输入,区别在于:
next()从遇到第一个有效字符(非空格、换行符)开始扫描,遇到第一个分隔符或结束符(空格’ ‘或者换行符 ‘\n’)时结束。

nextLine()则是扫描剩下的所有字符串直到遇到回车为止。(回车不会读入)**

正确的使用姿势:

1 Scanner sc = new Scanner(System.in);
2 //加入输入的是:aaa bbb ccc
3 str1=sc.next();
4 //str1="aaa"
5 str2=sc.nextline();
6 //str2=" bbb ccc"

解释一下原因
首先对于输入的数据,在计算机中实际表示是这样的,包含三个空格和一个换行符:
aaa bbb ccc \n
netx()函数从遇到的第一个有效的字符a开始扫描,直到遇到第一个空格扫描结束,得到字符串”aaa”
nextLine()函数从空格开始扫描知直到遇到\n符结束,故得到字符串是 ” bbb ccc”,注意这里bbb前面还有一个空格
所以如果要同时使用next和nextLine()时,要慎用,因为联合使用时就是一个整体,next在前,nextLine靠后,扫描接受的是同一行上的字符串,只不过接收的是不同内容罢了。

 

然而:

 1 public static void main(String args[]) throws IOException{
 2         Scanner in=new Scanner(System.in);
 3         String s1,s2;
 4         s1=in.next();
 5         s2=in.nextLine();
 6         //s2=in.next();
 7         System.out.println(s1+" "+s2);
 8     }
 9 控制台复制粘贴入:
10 str1
11 str2

 

结果却是str1,原因在于s1读到第一行的换行停止,但是并没有将其过滤,因此第二次读入的S2的时候直接只读到了换行就停止了

上课遇到的就是这个bug,后面有一行字符串死活读不进来。

2.如果nextLine读到\n得到什么?

 1 public static void main(String args[]) throws IOException{
 2         Scanner in=new Scanner(System.in);
 3         String s1,s2;
 4         s2=in.nextLine();
 5         if(s2.equals("")){
 6             System.out.println("n");
 7         }
 8         System.out.println(s2);
 9         System.out.println("over");
10     }
11 
12 
13 
14 结果是:(首先输入一个换行)
15 
16 n
17 
18 over

 

结论证明在直接读到\n的情况下,读到的最后""(空串);

 

 

3.判断输入结束(EOF):

while(sc.hasNext()){
        //获取输入值
             a=sc.nextInt();
         }

 

 

 

hasNext函数比较经常被使用

 

第二次上课坑点(有关Scanner in中的nextLine(),,next,,以及nextInt()使用注意)