【Java】Scanner的⽤法:单⾏多⾏输⼊
【Java】Scanner 的⽤法:单⾏/多⾏输⼊
本⽂较⼤程度参考以下博客,并根据⾃⼰本⾝需求与理解撰写。
⼀、Java Scanner类
Scanner类简介
Java 5添加了java.util.Scanner类,这是⼀个⽤于扫描输⼊⽂本的新的实⽤程序。它是以前的StringTokenizer和Matcher类之间的某种结合。由于任何数据都必须通过同⼀模式的捕获组检索或通过使⽤⼀个索引来检索⽂本的各个部分。于是可以结合使⽤正则表达式和从输⼊流中检索特定类型数据项的⽅法。这样,除了能使⽤正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进⾏分析。借助于Scanner,可以针对任何要处理的⽂本内容编写⾃定义的语法分析器。
Scanner类的常⽤⽅法
其实上图的意思就是,⽐如:nextlnt():只读取int值,就是只能读取整数类型的数据,如果输⼊了⾮整型的数据(浮点型字符串等)就会报错。
nextFloat()、nextDouble()这些也是以此类推,只能读取符合该类型的数据。
代码:
public class Text {
public static void main(String []args){
Scanner input =new Scanner(System.in);
System.out.println("请输⼊⼀个字符串(中间能加空格或符号)"); String a = Line();
System.out.println("请输⼊⼀个字符串(中间不能加空格或符号)"); String b = ();
System.out.println("请输⼊⼀个整数");
int c;
c = Int();
System.out.println("请输⼊⼀个double类型的⼩数");
double d = Double();
System.out.println("请输⼊⼀个float类型的⼩数");
float f = Float();
System.out.println("按顺序输出abcdf的值:");
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println(f);
}
}
运⾏结果:
请输⼊⼀个字符串(中间能加空格或符号)
我爱祖国!
请输⼊⼀个字符串(中间不能加空格或符号)
ILoveChina
请输⼊⼀个整数
520
请输⼊⼀个double类型的⼩数
12.26e3
请输⼊⼀个float类型的⼩数
3.1415926
按顺序输出abcdf的值:
我爱祖国!
ILoveChina
520
12260.0
3.1415925
Scanner类的常⽤⽅法2
代码演⽰:
public class inputInformation {
public static void main(String args[]){
Scanner scan =new Scanner(System.in);//构造Scanner类的对象scan,接收从控制台输⼊的信息 System.out.println("请输⼊你的姓名");
String name = Line();//接收⼀个字符串,可以加除Enter以外的所有符号,包括空格和Tab System.out.println("请输⼊你的ID");
String ID ;
while(scan.hasNextLine()){// hasNextLine()⽅法判断当前是否有输⼊,当键盘有输⼊后执⾏循环if(scan.hasNextInt()){// 判断输⼊的值是否为整数类型,当为整数类型时执⾏循环
ID = Line();
System.out.println("你输⼊的姓名为:"+name);
System.out.println("你输⼊的ID为:"+ID);
break;
}else{
System.out.println("请输⼊数字哦!");
ID = Line();
continue;java中split的用法
}
}
}
}
运⾏结果如下:
请输⼊你的姓名
华为
请输⼊你的ID
q764323221
请输⼊数字哦!
764323221
Scanner.close()⽅法的作⽤是关闭输⼊的流,释放内存。Scanner 类实例化的时候需要⼀个InputStream流作为参数,Scanner的close 就是关闭InputStream流的,⼀般是IO流或scanner⽅法使⽤完后就可以调⽤close()⽅法释放内存了,如果你是⼩程序可以不⽤使⽤.close ⽅法,这个不影响,但如果项⽬很⼤的时候就肯定要⽤了,所以建议养成良好的习惯。
⼆、Java的Scanner⽤法,主要⽤于算法笔试时的控制台输⼊
1 问题:解决这种情况下的Scanner输⼊:单⾏,多⾏,数值,字符串
平时写程序⼀般不⽤Scanner,线上笔试的时候,各⼤公司热衷于Scanner输⼊。
平时⽤LeetCode刷题也不会⽤到,结果多次在笔试时候卡在Scanner,特来总结⼀波。
2 单⾏输⼊多个参数
在⼀⾏输⼊多个参数
以空格(也可⽤其他的符号,不重要)为分割。
// 输⼊如下
ABB CCC DDD EEE 123435
程序如下:
import java.util.Arrays;
import java.util.Scanner;
public class myScanner {
Scanner sc =new Scanner(System.in);
public static void main(String[] args){
System.out.println("输⼊:");
Scanner sc =new Scanner(System.in);
String str = sc.nextLine();// 读取⼀⾏
System.out.println("输出:");
System.out.println(str);
String[] strIn = im().split(" ");// 以空格分割
System.out.String(strIn));
}
}
读出来的只能是字符串,如果想全部为数字,需要将读出来的字符串强⾏转换为数字(parseInt、parseLong等),运⾏⽰例如下:
3 多⾏输⼊多个参数,每⾏参数个数不定
多⾏输⼊元素,其中第⼀⾏⼏个数字表⽰下⾯⼏⾏的个数,每⾏可能输⼊不等数量的参数
以三⾏输⼊为例,第⼀⾏输⼊两个数字m,n,分别表⽰数组num1和num2的长度,第⼆⾏和第三⾏输⼊num1和num2的元素,以空格分隔。
// 输⼊如下
34
1023
11456
程序如下:
import java.util.Arrays;
import java.util.Scanner;
public class Scanner2 {
public static void main(String[] args){
System.out.println("输⼊:");
Scanner sc =new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int t = sc.nextInt();
// 换成其他数据类型也⼀样,其他数值类型就修改int跟nextInt就可以了,
/
/String就把nextInt()换成next()
System.out.println(m);
System.out.println(n);
System.out.println(t);
int[] num1 =new int[n];
int[] num2 =new int[t];
for(int i =0; i < n; i ++){
num1[i]= sc.nextInt();// ⼀个⼀个读取
}
System.out.String(num1));
for(int i =0; i < t; i ++){
num2[i]= sc.nextInt();
}
System.out.String(num2));
}
}
运⾏⽰例:
换成其他数据类型也⼀样,其他数值类型就修改int跟nextInt就可以了,String就把nextInt()换成next()
三、⾃⼰的理解:
next()和nextLine()的区别
next():只读取输⼊直到空格。它不能读两个由空格或符号隔开的单词。此外,next()在读取输⼊后将光标放在同⼀⾏中。(next()只读空格之前的数据,并且光标指向本⾏)
nextLine():读取输⼊,包括单词之间的空格和除回车以外的所有符号(即。它读到⾏尾)。读取输⼊后,nextLine()将光标定位在下⼀⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论