今天讲的是关于Java输入的问题,本来是没想起这个,但是今天下午我宿友问了我Java能不能用scanf和输入的相关的问题,就将自己知道的几个方法整理一下。
第一个方法是直接调用java.lang 包下的System.in.read()方法,获取输入。
其中System是java.lang包中的一个类,in为字节输入流,read()是一个方法。下面是源码。
public final static InputStream in = null;
用法为:
import java.io.IOException;
public class Demo02 {
public static void main(String[] args) throws Exception {
char ch=(char)System.in.read();
System.out.println(ch);
}
}
缺点:该方法能获取从键盘输入的字符,但只能针对一个字符的获取,获取的只是char类型的。返回的参数是整型的,必须强制转换为char类型,不然会输出错误,如果想获得int,float等类型的输入,比较麻烦。
注意:如果传入多个字符,只会返回第一个字符。
补充:System.out.println();其中 out 是 打印流。
public final static PrintStream out = null;
第二个方法是比较常用的,就是 Scanner.
具体使用如下:
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) throws Exception {
Scanner scanner=new Scanner(System.in);
//读取在控制台输入的一整行字符串,无论输入什么当作字符串
String str=scanner.nextLine();
System.out.println("我输入的是"+str);
//读取的是整型,当输入非整型数据时会报错
int i=scanner.nextInt();
System.out.println("我输入的是"+i);
//Scanner没有读取单个字符的方法
//能读取byte,long,short,double,float
}
}
123hello
我输入的是123hello
23
我输入的是23
Scanner 也可以与正则表达式一起进行解析字符串操作。
注意:next()与nextLine()的区别
next():
①输入的字符串中间不能有空格,若存在空格,返回空格前的字符,然后报错。
如:
hello java
我输入的是hello
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at csdn.Demo02.main(Demo02.java:11)
②会自动去掉输入的字符串前面和后面的空格。
hellojava
我输入的是hellojava
③有第一二点可以得到,next()不能得到带有空格的字符串
④回车键结束输入
nextLine():
①nextLine()可以获得空白,没有next()中的第一二点的限制。
sss ssl ll
我输入的是 sss ssl ll
②同样以回车键结束输入。
第三个方法是I/O流中的缓冲字符输入流,即BufferedReader.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Demo02 {
public static void main(String[] args) throws Exception {
BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
String str=read.readLine();
//没有Scanner中的读取其他类型的方法
System.out.println(str);
}
}
hello java
我输入的是:hello java
该readLine()方法与Scanner 中的readLine()用法差不多。但是没有类似于Scanner中能够读取其他类型的方法。
关于其中的InputStreamReader 是字节流与字符流之间的桥梁,其他方面在这里就不详解,有兴趣的小伙拌可以在以后学习I/O流时深入了解。
我目前了解到的关于在控制台输入的方法就这三个,不清楚还有没有多的,还知道其他方法的小伙伴麻烦留言告诉我一下。今天就讲到这里了,大家继续加油鸭!