java 控制台输入
2019-04-09 本文已影响0人
Spring_Bear
我有一段时间对于java控制台输入的概念觉得棘手和复杂,究其原因在于,要求的输入格式各式各样,针对不同的要求要设计不同获取输入的代码。
输入方法
获取控制台输入无非两种常用方法,以读取多行输入为例:
- BufferedReader字符缓冲流
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in));
String str = null;
while (true) {
str = reader.readLine();
if (!str.equals(""))
System.out.println(str);
else
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Scanner
public static void main(String[] args)
{
StringBuilder stringbuilder = new StringBuilder();
Scanner scanner = new Scanner(System.in);
while(true)
{
String text = scanner.nextLine().trim();
if ("".equals(text))
{
break;
}
stringbuilder.append(text);
}
System.out.println(stringbuilder.toString());
}
不同输入格式
遇到不同的输入格式要求,可以将按行读取后的字符串,按照要求进行另行处理,比方说按逗号分隔,空格分隔等等。
我之所以产生困惑的原因在于,希望在读取的过程中就把数据处理成格式要求的样子。究其原因还是思维混乱,急功近利以及代码耦合。而Scanner中众多的nextInt,nextChar,nextFloat等方法虽然在一定程度上提供了便利,但是使我养成了想把在读取的过程中就把数据处理成格式要求的样子的习惯,一定程度上来说算是坏事吧。
next和nextLine的区别
多记录一嘴,这个很多文章讲的很清楚了,next关键在于next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。nextLine在于把enter当作结束符,按行读取,所以能够读取空格等字符。