我有一段時(shí)間對(duì)于java控制臺(tái)輸入的概念覺得棘手和復(fù)雜看疗,究其原因在于秋柄,要求的輸入格式各式各樣显沈,針對(duì)不同的要求要設(shè)計(jì)不同獲取輸入的代碼刁卜。
輸入方法
獲取控制臺(tái)輸入無非兩種常用方法志电,以讀取多行輸入為例:
- 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());
}
不同輸入格式
遇到不同的輸入格式要求,可以將按行讀取后的字符串长酗,按照要求進(jìn)行另行處理溪北,比方說按逗號(hào)分隔,空格分隔等等。
我之所以產(chǎn)生困惑的原因在于之拨,希望在讀取的過程中就把數(shù)據(jù)處理成格式要求的樣子茉继。究其原因還是思維混亂,急功近利以及代碼耦合蚀乔。而Scanner中眾多的nextInt,nextChar,nextFloat等方法雖然在一定程度上提供了便利烁竭,但是使我養(yǎng)成了想把在讀取的過程中就把數(shù)據(jù)處理成格式要求的樣子的習(xí)慣,一定程度上來說算是壞事吧吉挣。
next和nextLine的區(qū)別
多記錄一嘴派撕,這個(gè)很多文章講的很清楚了,next關(guān)鍵在于next()一定要讀取到有效字符后才可以結(jié)束輸入睬魂,對(duì)輸入有效字符之前遇到的空格鍵终吼、Tab鍵或Enter鍵等結(jié)束符,next()方法會(huì)自動(dòng)將其去掉氯哮,只有在輸入有效字符之后际跪,next()方法才將其后輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結(jié)束符喉钢。nextLine在于把enter當(dāng)作結(jié)束符姆打,按行讀取,所以能夠讀取空格等字符肠虽。