Scanner对象的输入结束标记问题怎么解决(scanner,开发技术)

时间:2024-05-06 01:51:49 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

Scanner对象的输入结束标记

最近开始复习java了,自己不知道或者需要注意的地方自己做个笔记

packagegt;importjava.util.Scanner;/***CreatedbyCronouson2017/10/29.*/publicclassday01{publicstaticvoidmain(String[]args){System.out.print("请输入值:");Scanners=newScanner(System.in);while(s.hasNext()){System.out.println(s.next());}}}

我们输入 ”123 345 678“ 然后回车,发现控制台打印

123

345

678

我看了下scanner的api它是这么说的 :

Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。

然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

所以这里我们知道它默认是以空白匹配,所以我们输入当中有空格,它会一次读取,直到回车,但是你会发现我们最后一个数字后面并没有空格,系统也将数据分割出来了,

可能到这里不知道我在说啥,看下个例子:

packagegt;importjava.util.Scanner;/***CreatedbyCronouson2017/10/29.*/publicclassday01{publicstaticvoidmain(String[]args){System.out.print("请输入值:");Scanners=newScanner(System.in);s.useDelimiter("");//这里我们将系统分隔符主动设置为""while(s.hasNext()){System.out.println(s.next());}}}

在这里我们主动设置了一个分隔符 " " 然后上次一样输入数据,输入完按回车键 控制台效果如下:

123

345

这里我们会发现第三个数并没有输出,这是为什么? 我们发现我们输入完最后一个数时直接按回车了并没有输入我们设定的分隔符 " "

所以第三个数并没有被打印出来,我们这样输入 ”123 345 678 “再按回车就可以正常输出三个值,保证最后还有一个空格即可

再看一个代码(注意这里有个坑),我的需求是 获取输入值 ,当输入值为 "quit"时我们结束输入

packagegt;importjava.util.Scanner;/***CreatedbyCronouson2017/10/29.*/publicclassday01{publicstaticvoidmain(String[]args){System.out.print("请输入值:");Scanners=newScanner(System.in);while(s.hasNext()){if("quit".equals(s.next())){break;}else{System.out.println(s.next());}}}}

这里我们输入 ”123 345 quit“ 回车确认,这里我们希望得到输出为

123

345

可是我们的得到的输出为

345

为什么只有”345“输出? 这里我通过debug发现一个问题:因为当我们判断是否等于 ”quit“值时我们调用 s.next() 已经获取”123“了,后来打印的是再一次获取的值,也就是获取的下一个值 "345"了,所以最后出现了 只打印 ”345“的问题

下面给出正确代码,我们只需要保证s.next()值统一就行

packagegt;importjava.util.Scanner;/***CreatedbyCronouson2017/10/29.*/publicclassday01{publicstaticvoidmain(String[]args){System.out.print("请输入值:");Scanners=newScanner(System.in);while(s.hasNext()){Stringa=s.next();//将s.next()赋值给变量aif("quit".equals(a)){break;}else{System.out.println(a);}}}}

这样即可解决,问题不大,但是需要注意一下。

Scanner的输入及理解

Scanner

  • new 新生的意思

  • System.out输出

  • System.in 输入

Scannery对象

基本语法:

Scanners=newScanner(System.in);

通过Scanner类的next(下一个)与nextline(下一行)方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextline()判断是否还有输入的数据。

packageScnner;importjava.util.Scanner;publicclassDay01{ publicstaticvoidmain(String[]args){ //创建一个扫描对象,用于接收键盘数据 Scannerscanner=newScanner(System.in); //接收用户的输入,并把它封装scanner System.out.println("使用next方式接收:"); //判断用户有没有输出字符串 if(scanner.hasNext()==true) {//这里默认==true,不用谢也可以,但是还是建议写 Stringstr=scanner.next(); //使用next方式接收 System.out.println("输出的内容为:"+str); } } }
  • next()

一定要读取到有效字符后才可以结束输入。

对输入有效字符之前遇到的空白,next()方法会自动将其去掉。

只有输入有效字符后才将其后面输入的空白作为分隔符或者借宿符。

next()不能得到带有空格的字符串

  • nextLine()

以enter为结束符,也就是说nextLine()方法返回的输入回车之前的所有字符。

可以获得空白

packageScnner;importjava.util.Scanner;publicclassDay02{ publicstaticvoidmain(String[]args){ //从键盘来接收数据 Scannerscanner=newScanner(System.in); System.out.println("使用nextLine方式接收:"); //判断是否还有输入 if(scanner.hasNextLine()){ //等待用户去输入 Stringstr=scanner.nextLine(); System.out.println("输出的内容:"+str); } scanner.close(); }}

当然也可以不要if去判断

if(scanner.hasNextLine())
packageScnner;importjava.util.Scanner;publicclassDay03{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.println("请输入数据:");Stringstr=scanner.nextLine();System.out.println("输出的内容:"+str);scanner.close();}

这样也是可以的

Scanner输入内容理解(重点)

我个人是这样理解的

输入输出我们只要记住3行代码就行

System.out.println("请输入数据:");Stringstr=scanner.nextLine();System.out.println("输出的内容:"+str);

第一行代码是标题

请输入数据:

第二行代码: 是我们键盘所输出的所有内容,知道你按下回车键(enter)之后,把所有内容变成一个变量保存再str里面

第三行代码:则是等待第二行代码运行完成后,将输出内容+str(你键盘敲下的所有字符,也就是内容) 一起显示出来

如下图

Scanner对象的输入结束标记问题怎么解决

第一行为第一行代码

第二行hello world 为第二行代码,也就是你键盘敲下的内容

第三行则是等待第二行代码运行完成后,输出的内衣+键盘敲下的所有字符一起显示出来

注意

//凡是IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉scanner.close();//IO流输入输出流
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Scanner对象的输入结束标记问题怎么解决的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:SpringBoot定时任务功能怎么实现下一篇:

15 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18