目前从控制台读数据方式有如下几种
Scanner
nextLine()
1、以Enter为结束符读取输入、返回回车之前的所有字符(包括空白)并去除\n
2、会阻塞代码的执行!当用户输入数据并敲回车、Scanner的方法会获取用户输入的内容并保存在等号左边的变量中、然后结束代码的阻塞效果
3、读取输入后、nextLine()将光标定位在下一行
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()){
String input = sc.nextLine();
}
Scanner sc = new Scanner(System.in);
int total = sc.nextInt();
sc.nextLine(); /*to flush the character \n left by method nextInt()*/
String[] arr = new String[total];
for (int i = 0; i < total; i++) {
String str = sc.nextLine();
arr[i] = str;
}
next()
1、一定要读取到有效字符后才可以结束输入、不然即使回车也不算结束输入
2、对输入有效字符之前遇到的空白,next()方法会自动将其去掉
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
4、next()不能得到带有空格的字符串、会把空格视为分隔符
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String str = in.next();
}
InputStream
直接获取字节流
1、使用字节流读取输入的数据、不同字符字节数是不同的、读多字节字符会乱码
2、使用字节流读取输入的数据、空格、回车都会被读进来、使用wiile条件来终止读取
InputStream inputStream = System.in;
char c;
while ('\n' != (c = (char)inputStream.read())) {
System.out.print(c + " ");
}
abc123好人!!aa123
a b c 1 2 3 å ¥ ½ ä º º ! ! a a 1 2 3
BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
1. System.in 字节输入流
2. new InputStreamReader 将 字节流 转换为 字符流
3. new BufferedReader 将 字符流 放入 字符流缓冲区 之中
4. String str= br.readLine();
5. char c = br.read();
常用写法
// 读入char[]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char[] chars1 = br.readLine().toLowerCase().toCharArray();
br.close();
// 读入整数
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
br.close();
// 输入固定数量的String
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
String[] ss = new String[n];
for (int i = 0; i < n; i++) {
ss[i] = br.readLine();
}
br.close();
// 不用关闭流、一般视为读一次、或者一直读数据
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = bf.readLine()) != null) {
}
StreamTokenizer
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken();
int n = (int) st.nval; // 强转
StreamTokenizer st =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken(); //回车结束符
int i=(int) st.nval; //st.navl默认解析出的格式是double
st.nextToken();
double j=st.nval;
st.nextToken();
String s=st.sval;
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
int a, b;
while(in.nextToken() != StreamTokenizer.TT_EOF) // 表示读到了文件末尾
{
a = (int)in.nval;
in.nextToken();
b = (int)in.nval;
//out.println(a + b);
System.out.println("a + b = "+(a+b));
}
StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken();
int n = (int)st.nval;
for (int i = 0; i < n; i++) {
st.nextToken();
int key = (int)st.nval;
st.nextToken();
int value = (int)st.nval;
}