scanner标记读取方法,scanner接受字符
目录
扫描仪输入结束标记扫描仪输入和理解扫描仪扫描仪输入内容理解(强调)注意
00-1010最近开始复习java。我需要记下我不知道或需要注意的内容。
包gt;导入Java . util . scanner;/* * *由克洛诺斯于2017/10/29创建。*/public class day 01 { public static void main(string[]args){ system . out . print(请输入值:);Scanner s=新扫描仪(system . in);while(s . has next()){ system . out . println(s . next());}}}我们输入“123 345 678”然后回车找到控制台打印。
123
345
678
我看了下scanner的api它是这么说的 :
扫描仪使用分隔符模式将其输入分成标签,默认情况下匹配空白。
然后,您可以使用不同的next方法将结果标签转换为不同类型的值。
所以这里我们知道默认是空白匹配,所以我们输入的时候有一个空格,会一次读取到回车为止,但是你会发现我们最后一个数字后面没有空格,系统也是分数据的。
可能到这里不知道我在说啥,看下个例子:
包gt;导入Java . util . scanner;/* * *由克洛诺斯于2017/10/29创建。*/public class day 01 { public static void main(string[]args){ system . out . print(请输入值:);Scanner s=新扫描仪(system . in);s . usedelimiter(“”);//这里我们主动将系统分隔符设置为‘while(s . has next()){ system . out . println(s . next());}}}这里我们主动设置一个分隔符,然后像上次一样输入数据。输入后,按回车键的控制台效果如下:
123
345
这里我们会发现第三个数字没有输出。为什么?我们发现在输入最后一个数字的时候,直接按了enter,没有输入我们设置的分隔符 。
所以第三个数字是不打印的,我们可以输入“123 345 678”然后回车正常输出三个值,这样可以保证末尾有一个空格。
再看另一段代码(注意这里有个洞)。我的要求是得到输入值。当输入值为“退出”时,我们结束输入。
包gt;导入Java . util . scanner;/* * *由克洛诺斯于2017/10/29创建。*/public class day 01 { public static void main(string[]args){ system . out . print(请输入值:);Scanner s=新扫描仪(system . in);while(s.hasNext()){ if(quit )。equals(s . next())){ break;} else { system . out . println(s . next());}}}}这里我们输入“123 345退出”,回车确认。这里我们希望得到如下输出
123
345
但是我们的产量是
345
为什么只有“345”输出?我在这里通过debug发现了一个问题:因为我们在判断是否等于“quit”值的时候调用了s.n。
ext() 已经获取123了,后来打印的是再一次获取的值,也就是获取的下一个值 "345"了,所以最后出现了 只打印 345的问题
下面给出正确代码,我们只需要保证s.next()值统一就行
package gt; import java.util.Scanner; /** * Created by Cronous on 2017/10/29. */public class day01 { public static void main(String[] args){ System.out.print("请输入值:"); Scanner s = new Scanner(System.in); while(s.hasNext()){ String a = s.next();//将s.next()赋值给变量a if("quit".equals(a)){ break; }else{ System.out.println(a); } } }}
这样即可解决,问题不大,但是需要注意一下。
Scanner的输入及理解
Scanner
new 新生的意思System.out输出System.in 输入Scannery对象
基本语法:
Scanner s = new Scanner(System.in);
通过Scanner类的next(下一个)与nextline(下一行)方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextline()判断是否还有输入的数据。
package Scnner;import java.util.Scanner;public class Day01 {public static void main(String[] args) {//创建一个扫描对象,用于接收键盘数据Scanner scanner = new Scanner(System.in);//接收用户的输入,并把它封装scannerSystem.out.println("使用next方式接收:");//判断用户有没有输出字符串if (scanner.hasNext()==true){ //这里默认==true,不用谢也可以,但是还是建议写String str = scanner.next();//使用next方式接收System.out.println("输出的内容为:"+str);}}}
next()
一定要读取到有效字符后才可以结束输入。
对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
只有输入有效字符后才将其后面输入的空白作为分隔符或者借宿符。
next()不能得到带有空格的字符串
nextLine()
以enter为结束符,也就是说nextLine()方法返回的输入回车之前的所有字符。
可以获得空白
package Scnner;import java.util.Scanner;public class Day02 {public static void main(String[] args) {//从键盘来接收数据Scanner scanner = new Scanner(System.in);System.out.println("使用nextLine方式接收:");//判断是否还有输入if (scanner.hasNextLine()){//等待用户去输入String str = scanner.nextLine();System.out.println("输出的内容:"+str);}scanner.close();}}
当然也可以不要if去判断
if (scanner.hasNextLine())
package Scnner;import java.util.Scanner;public class Day03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入数据:"); String str = scanner.nextLine(); System.out.println("输出的内容:"+str); scanner.close(); }
这样也是可以的
Scanner输入内容理解(重点)
我个人是这样理解的
输入输出我们只要记住3行代码就行
System.out.println("请输入数据:"); String str = scanner.nextLine(); System.out.println("输出的内容:"+str);
第一行代码是标题
请输入数据:
第二行代码: 是我们键盘所输出的所有内容,知道你按下回车键(enter)之后,把所有内容变成一个变量保存再str里面
第三行代码:则是等待第二行代码运行完成后,将输出内容+str(你键盘敲下的所有字符,也就是内容) 一起显示出来
如下图
第一行为第一行代码
第二行hello world 为第二行代码,也就是你键盘敲下的内容
第三行则是等待第二行代码运行完成后,输出的内衣+键盘敲下的所有字符一起显示出来
注意
//凡是IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关掉 scanner.close(); //IO流 输入输出流
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。