今天讲的是关于Java输入的问题,本来是没想起这个,但是今天下午我宿友问了我Java能不能用scanf和输入的相关的问题,就将自己知道的几个方法整理一下。

java获取键盘输入的字符串 java 获取输入_java

第一个方法是直接调用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等类型的输入,比较麻烦。

注意:如果传入多个字符,只会返回第一个字符。

java获取键盘输入的字符串 java 获取输入_System_02

java获取键盘输入的字符串 java 获取输入_java_03


补充: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流时深入了解。

我目前了解到的关于在控制台输入的方法就这三个,不清楚还有没有多的,还知道其他方法的小伙伴麻烦留言告诉我一下。今天就讲到这里了,大家继续加油鸭!