从控制台动态输入数据,对数据进行各种各样的处理,然后将数据输出是很常见的操作。现在对数据的输入方式进行系统的介绍:

1. Scanner类的调用

  • 相关方法

hasNext()
判断扫描器中当前扫描位置后是否还存在下一段。
hasNextLine()
如果在此扫描器的输入中存在另一行,则返回 true。
next()
查找并返回来自此扫描器的下一个完整标记。
nextLine()
此扫描器执行当前行,并返回跳过的输入信息。
nextInt()
将控制台扫描的整形数据返回。

  • 代码举例
package FIRST_Chapter;

import java.util.Scanner;

public class TestScanner { 
        public static void main(String[] args) { 
                Scanner s = new Scanner(System.in); 
                System.out.println("请输入字符串:"); 
                while (true) { 
                        String line = s.nextLine(); 
                        if (line.equals("ok")) break; 
                        System.out.println(">>>" + line); 
                } 
        } 
}
  • 结果演示:
请输入字符串:
12
>>>12
haha
>>>haha
ok

这个地方注意next()和nextLine()方法的区别

***next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
简单地说,next()查找并返回来自此扫描器的下一个完整标记。完整标记的前后是与分隔模式匹配的输入信息,所以next方法不能得到带空格的字符串。
而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。*

  • 比如如下程序:
package FIRST_Chapter;

import java.util.Scanner;

class test{
    public static void main(String[] Args){

        Scanner sc= new Scanner(System.in);
        System.out.println("请输入一段数据");
        String str =sc.next();
        System.out.println("用next输入的语句"+str);
        String str1 =sc.nextLine();
        System.out.println("用nextLine输入的语句"+str1);
        //sc.nextLine();//如果下面注释行想用nextLine的话,就要注意加上这句话

    }
}

输出结果:

请输入一段数据
1 2 3
用next输入的语句1
用nextLine输入的语句 2 3

换个结果输出

请输入一段数据
haha
用next输入的语句haha
用nextLine输入的语句

总结:next碰到空格,换行都结束输入。而nextLine只以换行(回车)才会结束输入。
从第二个结果看出,当你输入回车表示输入结束时,这个时候下一行的代码nextLine也结束了输入。而输入的结果是空的,就是个回车而已。


2. BufferedReader类的调用

package FIRST_Chapter;

import java.io.*;

class test{
    public static void main(String[] Args){
         try{  
                System.out.println("please input the content that you want to show,end with new line <ok>");

                InputStreamReader isr = new InputStreamReader(System.in); //这样是为了将数据传入流中,相当于数据流的入口
                BufferedReader br = new BufferedReader(isr);
                while(true){
                String temp = new String(br.readLine());
                System.out.println(">>>"+temp);
                if(temp.equals("ok")) break; //注意这个地方不能用等号,用equals 
                }

                System.out.println("the content from your keyboard has been written correctly");

                    }catch(IOException e){
                        System.out.println("the file has not record correctly");
                    }

    }
}

输出结果:

please input the content that you want to show,end with new line <ok>
123
>>>123
haha
>>>haha
ok
>>>ok
the content from your keyboard has been written correctly