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和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
随机推荐
- eclipse+PyDev里面import win32api报错的问题解决
windows下面eclipse+PyDev的开发环境,安装了pywin32,写import win32api时老提示错误,在idle里正常执行. 原来是安装python库时,python安装路径下面 ...
- django基础知识
一.django的安装 1. pip3 install django 2. 把安装路径加到环境变量里以便以后启动admin相关命令,在windows系统中---我的电脑---属性----高级系统设置- ...
- django上课笔记7-jQuery Ajax 和 原生Ajax-伪造的Ajax-三种Ajax上传文件方法-JSONP和CORS跨域资源共享
一.jQuery Ajax 和 原生Ajax from django.conf.urls import url from django.contrib import admin from app01 ...
- liteos 中断机制(四)
1. 概述 中断是指出现需要时, CPU暂停执行当前程序,转而执行新程序的过程.即在程序运行过程中,系统出现了一个必须由CPU立即处理的事务,此时, CPU暂时中止当前程序的执行转而处理这个事务,这个 ...
- 一个坑爹的Swift报错原因分析与解决方案
有时候在实际开发中,完全没有任何问题.但是一到实机测试,就会直接卡机 let count = scoreStorage.count return scoreStorage[Int(arc4rand ...
- 老天待我不薄,又来这么一题POJ1753
还是位运算+BFS系列题: 现在这种真是无比喜欢,今天搞了一上午这题...因为状态的改变写错了-T.T #include<cstdio> #include<queue> #in ...
- MySQL与MongoDB的区别
一.MongoDB简介 什么是MongoDB ?MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.MongoDB 旨 ...
- PJzhang:lijiejie的敏感目录爆破工具BBScan
猫宁!!! 参考链接: https://www.freebuf.com/sectool/85729.html https://segmentfault.com/a/1190000014539449 这 ...
- android 浏览器对图片加载高度渲染问题
今天在开发有道汉语词典移动版的时候遇到了一个很奇怪的问题. 在android设备上访问的时候,总是发现有底部背景色不能完全渲染出来的情况(有时候又是正常的,一会儿出现一会儿不出现,iphone设备也是 ...
- Helvetic Coding Contest 2017 online mirror (teams allowed, unrated) M
Description The marmots have prepared a very easy problem for this year's HC2 – this one. It involve ...