使用Scanner或BufferedReader实现

1. 使用Scanner

下面一个例子是,利用 Scanner 实现从键盘读入integer或float 型数据

import java.util.Scanner;

public class Test {
    public static void main(String args[]) {
        //使用Scanner类定义对象
        Scanner in = new Scanner(System.in);
        System.out.println("please input a float number");
        //接收float型数据  
        float a = in.nextFloat();
        System.out.println(a);
        System.out.println("please input a integer number");
        //接收int型数据 
        int b = in.nextInt();
        System.out.println(b);
        System.out.println("please input a String ");
        //接收字符串型数据 
        String c = in.nextLine();
        System.out.println(c);
    }
}

  在Java SE 6及以上,可以使用Scanner类取得用户的输入,Scanner类位于java.util包中,如果你要使用Scanner取得用户输入的话,要加上 import java.util.Scanner;这条语句import的功能是告诉编译器,你将使用java.util包中的Scanner类。

  new是创建一个对象,程序中new的意思是创建了一个Scanner类的对象scan。但是在创建Scanner类的对象时,需要用System.in 作为它的参数,也可以将Scanner看作是System.in对象的支持者,System.in取得用户输入的内容后,交给Scanner来作一些处理。

Scanner类中提供了多个方法next():取得一个字符串;

  • nextLine() :获取一行字符串;
  • nextInt():将取得的字符串转换成int类型的整数;
  • nextFloat():将取得的字符串转换成float型;
  • nextBoolean():将取得的字符串转换成boolean型;

  用Scanner获得用户的输入非常的方便,但是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键。当按下这其中的任一键时,Scanner就会返回下一个输入,所以用nextLine()方法;

  Scanner类中next()与nextLine()方法的区别:next()与nextLine()区别很明确,next() 方法遇见第一个有效字符(不是空格和换行符)时,开始扫描,当遇见第一个分隔符或结束符(空格或换行符)时,结束扫描,获取扫描到的内容,也就是说使用next()方法获得的是不含空格和换行符的单个字符串。而使用nextLine()时,则可以扫描到一行内容并作为一个字符串而被获取到。

  当然还有其他方法获取字符串,看下面这个你熟悉不熟悉

2. 使用BufferedReader

先看一个例子:利用 BufferedReader实现从键盘读入字符串并写进文件test.txt中。

import java.io .*;

public class Test {
    public static void main(String[] args) throws IOException {
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter buff = new BufferedWriter(new FileWriter("test.txt"));
        String str = buf.readLine();
        while (!str.equals("exit")) {
            buff.write(str);
            buff.newLine();
            str = buf.readLine();
        }
        buf.close();
        buff.close();
    }
}

  其实在Java SE 1.4及以前的版本中,尚没有提供Scanner方法,我们获得输入时也是使用BufferReader的.

  BufferedReader类位于java.io包中,所以要使用这个类,就要引入java.io这个包:import java.io.BufferedReader。

  使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception).
使用BufferedReader来取得输入,理解起来要复杂得多。但是使用这个方法是固定的,每次使用前先如法炮制就可以了。

BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
String text = buffer.readLine();
readLine()方法会返回用户在按下Enter键之前的所有字符输入,不包括最后按下的Enter返回字符。

获取字符串的方法

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
public class TestBufferedReader {  
    public static void main(String[] args) throws IOException {  
        BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));  
        System.out.println("请输入一串字符串");  
        String test = buffer.readLine();  
        System.out.println("您输入的字符串是:" + test);  
    }  
}

3. 用Scanner获取数组

3.1 用Scanner.next()

  限制数组个数,可以自己设置字符串长度。

import java.util.Scanner;  

public class Test {  
    public static void main(String args[]) {  
        System.out.println("请输入五个数:");
        Scanner in = new Scanner(System.in);
        int[] b=new int[5];
        for(int i=0;i<b.length;i++){
        b[i]=in.nextInt();
        System.out.println(""第"+(i+1)+"个数是"+b[i]");
    }  
}

  就是每获取一个数,就用数组把它储存起来。

3.2 用Scanner.nextLine()

  不限制数组个数。

import java.util.Scanner;  

public class Test {  
    public static void main(String args[])  {
        System.out.println("请输入几个数,用空格分开");
        Scanner scan = new Scanner(System.in);
        String str;
        str = scan.nextLine();
        String[] arr  = str.split(" ");
        int[] b = new int[arr.length];
        for(int j = 0; j<b.length;j++) {
            b[j] = Integer.parseInt(arr[j]);
            System.out.println("第"+(j+1)+"个数是"+b[j]);
        }
    }  
}

  通过字符串的形式,再转化成int[ ] 数组。获取一行,然后去掉空格,成了一个字符串,再把字符串分成若干个数。依次存入数组中。

其实这个用 BufferedReader 也可以实现,这里就不写出了。