您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第12章:JAVA IO】_Scanner
发布时间:2020-12-29 17:04:23编辑:雪饮阅读()
Scanner类获取用户输入更简单,没有流操作那么多麻烦的流程。
import java.util.*;
public class Hello{
public static void main(String args[]) throws Exception{
Scanner scan=new Scanner(System.in);
System.out.print("输入数据:");
String str=scan.next();
System.out.println("输入的数据为:"+str);
}
};
如果用户输入的内容中有空格则会被截断
D:\>java Hello
输入数据:abc def
输入的数据为:abc
这是因为默认Scanner使用空格来分隔,将输入分解为标记。
useDelimiter方法可以指定Scanner的默认分隔符
比如这里修改为换行符
import java.util.*;
public class Hello{
public static void main(String args[]) throws Exception{
Scanner scan=new Scanner(System.in);
System.out.print("输入数据:");
scan.useDelimiter("\n");
String str=scan.next();
System.out.println("输入的数据为:"+str);
}
};
D:\>javac Hello.java
D:\>java Hello
输入数据:abc def
输入的数据为:abc def
Scanner类实现中判断输入数据类型与对应数据类型数据的获取
import java.util.*;
public class Hello{
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
System.out.print("输入数据:");
if(scan.hasNextInt()){
System.out.println("整型数据:"+scan.nextInt());
}
if(scan.hasNextFloat()){
System.out.println("浮点型数据:"+scan.nextFloat());
}
}
};
D:\>javac Hello.java
D:\>java Hello
输入数据:1
整型数据:1
2
浮点型数据:2.0
D:\>java Hello
输入数据:1
整型数据:1
x
看来这个判断浮点型的是有点问题的
另外这里需要注意,如果这里的分隔符是换行则会导致一直不按程序输出。
Scanner日期类型输入数据获取
import java.util.* ;
import java.text.* ;
public class Hello{
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
System.out.print("输入数据:");
if(scan.hasNext("^\\d{4}-\\d{2}-\\d{2}$")){
String str=scan.next("^\\d{4}-\\d{2}-\\d{2}$");
System.out.println("日期数据:"+str);
try{
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(str) ;
System.out.println(date) ;
}
catch(Exception e){}
}
}
};
D:\>javac Hello.java
D:\>java Hello
输入数据:2020-12-29
日期数据:2020-12-29
Tue Dec 29 00:00:00 CST 2020
其实这里在scan.next中要不要正则都可以,但是正则不匹配就会出错。
Scanner类可以用文件进行构造,则读取数据的时候将文件当作类似System.in的键盘输入一样,只是读取文件的时候是不断读取的而不是像键盘输入只读取一次。
import java.util.* ;
import java.text.* ;
import java.io.* ;
public class Hello{
public static void main(String args[]){
File f = new File("D:" + File.separator + "kasumi.txt") ;
try{
Scanner scan=new Scanner(f);
String str="";
while(scan.hasNext()){
str+=scan.next();
}
System.out.print(str);
}
catch(Exception e){
}
}
};
D:\>javac Hello.java
D:\>java Hello
这里读取也是逐行读取的,所以为什么要用循环,是因为键盘输入的时候又用户手动换行而换行后监听就结束了,则肯定只需要读取一次(一行),而已经给定的文件中的内容则可能预先就是有多行的文本,但是这里会发现文件末尾中若有空白行就不会被打印出来。
则可以用如下方式:
import java.util.* ;
import java.text.* ;
import java.io.* ;
public class Hello{
public static void main(String args[]){
File f = new File("D:" + File.separator + "kasumi.txt") ;
try{
Scanner scan=new Scanner(f);
String str="";
while(scan.hasNext()){
str+=scan.next()+"\n";
}
System.out.print(str);
}
catch(Exception e){
}
}
};
或者这样
import java.util.* ;
import java.text.* ;
import java.io.* ;
public class Hello{
public static void main(String args[]){
File f = new File("D:" + File.separator + "kasumi.txt") ;
try{
Scanner scan=new Scanner(f);
StringBuffer str=new StringBuffer();
while(scan.hasNext()){
str.append(scan.next()).append("\n");
}
System.out.print(str);
}
catch(Exception e){
}
}
};
其实意义都不是很大,仅仅在末尾补了一行,如果末尾是多个空白行或者内容中间部位有多个空白行则还是不会被显示出来。
关键字词:java,Scanner