写在前面的内容,java控制台输入浅尝辄止即可 》》》
文章目录
三种方法比较一览图
以下记录三种方法实现 Java 的控制台输入操作,首先看优缺点一览表(循序渐进↓↓↓)
序号 | 方法 | 优点 | 缺点 |
---|---|---|---|
1 | System.in / System.out | —— | 1.能获取键入的字符,但只能针对一个字符的获取 |
2.获取的只是char类型(int、float等比较麻烦) | |||
2 | 替换系统流 | 1.可以获取键入的字符串 | 2.若获取int、float等类型需要转换 |
3 | Scanner | 1.可以获取键入的字符串 | —— |
2.有现成的获取int、float等类型数据,非常强大,非常方便 |
方法一:in/out
System是一个类,属于java.lang包,表示系统类。其中in和out是System类的属性。
package my;
import java.io.IOException;
//import java.io.BufferedReader;
//import java.io.InputStreamReader;
//import java.util.Scanner;
public class Hello
{
public static void main(String[] args)
{
//
/*
* System.in和System.out方法
* 缺点一:能获取键入的字符,但只能针对一个字符的获取
* 缺点二:获取的只是char类型(int、float等比较麻烦)
*/
try
{
System.out.println("输入一个Char:");
char i = (char)System.in.read(); // System类直接调用,返回InputStream类
System.out.println("输入的Char为:" + i);
}
catch(IOException e)
{
e.printStackTrace();
}
//
}
}
public static final InputStream in//静态方法
- 用类名称直接调用,返回InputStream类,也就是说可以为InputStream实例化。
- System.in是 InputStream类型,字节流,程序使用它可读取键盘输入的数据。
- “标准”输入流。此流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源。
public static final PrintStream out//静态方法
- 用类名称直接调用,返回PrintStream类,也就是说可以为OutputStream实例化
- System.out 是 PrintStream类型(是OutputStream的子类),字节流,程序使用它可将数据输出到显示屏上。
- “标准”输出流。此流已打开并准备接受输出数据。通常,此流对应于显示器输出或者由主机环境或用户指定的另一个输出目标。
方法二:替换系统流
package my;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//import java.util.Scanner;
public class Hello
{
public static void main(String[] args)
{
//
/*
* 替换系统流
* InputStreamReader和BufferedReader方法
* 优点:可以获取键入的字符串
* 缺点:若获取int、float等类型需要转换
*/
System.out.println("ReadTest, Please Enter Data:");
InputStreamReader is = new InputStreamReader(System.in); //new构造InputStreamReader对象
BufferedReader br = new BufferedReader(is); //拿构造的方法传到BufferedReader中,此时获取到整个缓存流
try
{
//该方法中有个IOExcepiton需要捕获
String name = br.readLine();
System.out.println("ReadTest Output:" + name);
}
catch(IOException e)
{
e.printStackTrace();
}
//
}
}
InputStreamReader
- 字节流与字符流之间的桥梁。
- 能将字节流输出为字符流并且能为字节流指定字符集。
BufferedReader
- 比InputStreamReader更高级,封装了StreamReader类,一次读取一行的字符,提供通用的缓冲方式文本读取。
- readLine读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
方法三:Scanner
package my;
//import java.io.BufferedReader;
//import java.io.IOException;
//import java.io.InputStreamReader;
import java.util.Scanner;
public class Hello
{
public static void main(String[] args)
{
//
/*
* Scanner
* 优点一:可以获取键入的字符串
* 优点二:有现成的获取int、float等类型数据,非常强大,非常方便
*/
Scanner sc = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Name:");
String name = sc.nextLine(); // 读取字符串型输入
System.out.println("ScannerTest, Please Enter Age:");
int age = sc.nextInt(); // 读取整型输入
System.out.println("ScannerTest, Please Enter Height:");
float height = sc.nextFloat(); // 读取float型输入
System.out.println("Your Information is as below:");
System.out.println("Name:" + name + "\n" +
"Age:" + age + "\n" +
"Height:" + height);
//
}
}
Scanner
- Java5的新特征,主要功能是简化文本扫描。
- Scanner的中文意思就是扫描仪,即将一份数据从一个地方扫描并显示到另一个的地方。
- 一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
札记
java里常使用的方法next() 与 nextLine() 区别
next(): | 1.一定要读取到有效字符后才可以结束输入。 | nextLine(): | 1.以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。 |
---|---|---|---|
2.对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。 | |||
3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。 | 2.可以获得空白。 | ||
4.next() 不能得到带有空格的字符串。 |