System类与两种输入流
1.System类对I/O的支持
系统输出System.out.println 是利用了I/O流的模式完成的。实际是打印流PrintStream对象
System类中定义了三个操作的常量
1.标准/系统输出(显示器)
public final static PrintStream out
1
2.标准错误输出,也是打印流对象,除了颜色是红色外与System.out 别无二致
public final static PrintStream err
1
3.标准输入(键盘)是 InputStream对象,没有任何包装
public final static InputStream in
1
2.两种输入流
由于JDK 1.0提供的System.in 太难用
JDK1.1之后扩展了BufferedReader 类 JDK 1.5之后提供了java.util.Scanner类
2.1BufferedReader类
BufferedReader类属于一个缓冲输入流,而且是一个字符流的操作对象。在Java中对于缓冲区流也分为两类:字节缓冲流(BufferedInputStream)、字符缓冲流(BufferedReader)
BufferedReader 类的定义和构造方法
public class BufferReader extends Reader//定义
public BufferedReader(Reader in)//构造方法
1
2
BufferedReader类提供如下方法 可以直接读取一行数据(以回车为换行符)
String readLine() throws IOException
1
代码示例
package JAVASE.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
/**
* @Name:练习BufferedReader系统输入类
* @Author:ZYJ
* @Date:2019-05-19-20:18
* @Description:
*/
public class BufferedReaderTest {
public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入信息:");
String str = buf.readLine();//默认回车换行
System.out.println("输入信息为:"+str);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2.2 java.util.Scanner 类
打印流解决的是OutputStream 类的缺陷,BufferedReader解决的是InputStream类的缺陷。而Scanner解决的是BufferedReader类的缺陷,
Scanner是一个专门进行输入流处理的程序类,利用这个类可以方便的处理各种数据类型,同时也可以结合正则表达式进行各项处理。
2.2.1 方法
1.判断是否含有指定数据
public boolean hasNextXxx()//各种数据类型
1
2.取得指定的数据类型
public 数据类型 nextXxx()
1
3.定义分隔符
public Scnner useDelimiter(Pattern pattern)
1
4.构造方法
public Scnner(InputStream source)
1
代码示例 :使用Scanner类实现数据输入
package JAVASE.IOtext;
import java.util.Scanner;
/**
* @Name:Scnner 类的练习
* @Author:ZYJ
* @Date:2019-05-22-10:43
* @Description:
*/
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
//输入内容判空操作
if (scanner.hasNext()) {
//取得指定的输入流
System.out.println("输入的内容为" + scanner.next());
}
//关闭流
scanner.close();
}
}
//默认以\n结束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
代码示例:使用Scanner类接收其他数据类型数据
package JAVASE.IOtext;
import java.util.Scanner;
/**
* @Name:Scanner 与任意类型的转换
* @Author:ZYJ
* @Date:2019-05-22-11:32
* @Description:
*/
public class ScannerPrint {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入年龄");
if(scanner.hasNext()){
int age = scanner.nextInt();
System.out.println("年龄为:"+age+"岁");
}else{
System.out.println("输入内容非法");
}
scanner.close();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2.2.2 Scanner类与正则表达式
**正则表达式:**是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
可以通过正则表达式,从字符串中获取我们想要的特定部分。
Scanner 类可以对接受的数据类型使用正则表达式判断
代码示例:利用正则表达式进行判断
package JAVASE.IOtext;
import java.util.Scanner;
/**
* @Name:Scanner类练习
* @Author:ZYJ
* @Date:2019-05-22-11:22
* @Description: 利用正则表达式进行判断
*/
public class TestPrint {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入生日:");
if(scanner.hasNext("\\d{4}-\\d{2}-\\d{2}")){
//取得指定输入流,并将其转化为字符串
String birthday = scanner.next();
System.out.println("输入的生日为:"+birthday);
}else{
System.out.println("输入格式非法,不是生日!!!");
}
//关闭流
scanner.close();
}
}
---------------------
System类与两种输入流的更多相关文章
- 菜鸡的Java笔记 第十三 String 类的两种实例化方法
String 类的两种实例化方法 String 类的两种实例化方式的区别 String 类对象的比较 Stirng 类对象的使用分析 /* 1.String 类的两种实例化方式的区别 ...
- Python 自定义元类的两种写法
有关元类是什么大家自己搜索了解,我这里写一下实现元类的两种写法 # 自定义元类 #继承type class LowercaseMeta(type): ''' 修改类的属性名称为小写的元类 ''' # ...
- Struts 2 数据校验要用到的类和两种校验方式以及一些校验问题的解决
通过继承ActionSupport类来完成Action开发,ActionSupport类不仅对Action接口进行简单实现, 同时增加了验证.本地化等支持 .真实开发中自定义Action都需要继承该类 ...
- Java中匿名类的两种实现方式(转)
使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...
- String类对象两种实例化方式比较
第一种:直接赋值 String str = "hello!" ; 在java中,有一个字符串常量池,对于这种直接赋值的,会直接写进常量池(常量池里面不存在其value,) 自JD ...
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- 【C++】类的两种实例化方法
直接上代码: #include<stdio.h> #include<string> #include<iostream> using namespace std; ...
- python_106_创建类的两种方式
class Foo(object): def __init__(self, name): self.name = name f = Foo("alex") print(type(f ...
- xml转json和实体类的两种方式
本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
随机推荐
- 【SDOI2009】SuperGCD
[题目链接] 点击打开链接 [算法] 1.关于求最大公约数的算法 若使用辗转相除法,那么显然会超时 不妨这样思考 : 要求gcd(a,b), 若a为偶数,b为偶数,则gcd(a,b) = 2 * gc ...
- webpack 工作方式
把你的项目当做一个整体,通过一个给定的主文件(如index.js),webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个或多个 浏览器可识别额javas ...
- vue 基本知识整理
1 每个Vue.js应用都是通过构造函数Vue创建一个Vue的根实例 2 可以扩展Vue构造器,从而使用预定义选项创建可复用的组件构造器 所有的Vue.js组件其实都是被扩展的Vue实例 每一个VUE ...
- Two
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...
- python __builtins__ zip类 (71)
71.'zip' , 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表.如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作 ...
- 查看软件安装的位置 Ubuntu
Ubuntu和windows不一样,不是所有的软件都在一个文件夹,而是不同类型的分散在不同的文件夹下 所以查找起来也是不同的 如果知道是用 apt-get install 方法安装的,可以直接用 dp ...
- JSP | 基础 | 两种方式循环输出
用循环连续输出三个你好,字体从小变大 第一种: <body> <%! //通过表达式方式调用实现 String HelloJSP1(){ String str = "&qu ...
- 线段树(单点更新) HDOJ 4288 Coder
题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...
- linux查找命令(find)
linux查找命令(find) 命令格式: find [目录] [选项] [选项的条件] 选项: -name:文件名称查找 -size:文件的大小来查找 -perm:文件的权限来查找 ①根据文件的名称 ...
- 题解报告:poj 1985 Cow Marathon(求树的直径)
Description After hearing about the epidemic of obesity in the USA, Farmer John wants his cows to ge ...