JAVA程序开发过程中,需要从键盘获取输入值是常有的事,但java它没有像c语言给我们提供scanf(),c++给我们提供cin()获取键盘输入值的现成函数。

java中获取键盘输入值一般有以下三种解决方法:


方法一: 从控制台接受一个字符,然后将其打印出来

import java.io.*;
public static void main(String[] args) throws IOException{
     System.out.print("Please enter a char:");
     char I = (char) System.in.read();
     System.out.println("The char you enter is:" + I);
}

*******System.in.read()只能针对一个字符的获取,同时,获取进来的变量类型只能是char,当输入其它类型时,还需要修改变量类型。*******


方法二: 从控制台接受一个字符串,然后将其打印出来。

在这里我们需要用到BufferedReader类和InputStreamReader类

import java.io.*;
public static void main(String[] args) throws IOException{
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
     String str = null;
     System.out.println("Please enter your value:");
     str = br.readLine();
     System.out.println("the string you enter was: " + str);
}

方法三: 使用Scanner类

import java.io.*;
import java.util.Scanner;
public static void main(String[] args) throws IOException{
     Scanner sc = new Scanner(System.in);

     System.out.println("Please input your name:");
     String name = sc.nextLine();

     System.out.println("Please input your age: ");
     int age = sc.nextInt();

     System.out.println("Please input your salary: ");
     float salary = sc.nextFloat();

     System.out.println("Your info was below:");
     System.out.println("name: " + name +"\n" + "Age: " + age +"\n" + "Salary: " + salary);
}

这段代码已经表明,Scanner类不管是对于字符串还是整数型数据或者float型的变量。只需要做点小小的改动,就能够实现功能,它的功能最强大。


但是,


在使用第三种输入方法的时候有一个需要注意的地方,就是nextLine()函数,在io包中有一个和它功能一样的函数next()函数,他们的功能一样,但是在实现上有什么差别呢?请看下面代码:

import java.io.*;
import java.util.Scanner;
public static void main(String[] args) throws IOException{
     Scanner sc = new Scanner(System.in);

     System.out.println("Please input your age: ");
     int age = sc.nextInt();

     System.out.println("Please input your name:");
     String name = sc.nextLine();

     //System.out.println("Please input your age: ");
     //int age = sc.nextInt();

     System.out.println("Please input your salary: ");
     float salary = sc.nextFloat();

     System.out.println("Your info was below:");
     System.out.println("name: " + name +"\n" + "Age: " + age +"\n" + "Salary: " + salary);
}

此段代码和上边的第三种实现方法的区别在于,这段代码先执行nextInt()再执行nextLine(),而第三种方法中是先执行nextLine()再执行nextInt()。

当执行这两段代码时,你会发现第三种方法可以正常的输入,但是在上面的代码中,输入年龄后,敲击enter键后,跳过了输入姓名,直接到了输入工资这行。

回车符会被nextLine()函数吸收,


*******next()是不接受回车符、tab和空格, 而nextLine()可以接受空格或者tab键,其输入应该以enter键结束。