Java
程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧:
以下将列出几种方法:
单纯System.in:
从控制台接收一个字符,然后将其打印出来import java.io.*;
public static void main(String [] args)throws IOException{
System.out.print("Enter aChar:");
char i =(char) System.in.read();
System.out.println("your char is:"+i);
}
虽然此方式实现了从键盘获取输入的字符,但是System.out.read()只能针对一个字符的获取,同时,获取进来的变量的类型只能是char,当我们输入一个数字,希望得到的也是一个整型变量的时候,我们还得修改其中的变量类型,这样就显得比较麻烦。
缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取
缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。
缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取
缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。
InputStreamReader和BufferedReader方法:
从控制台接收一个字符串,然后将其打印出来。在这个题目中,我们需要用到BufferedReader类和InputStreamReader类import java.io.*;
public static void main(String [] args)throws IOException{
BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
String str = null;
System.out.println("Enter yourvalue:");
str =br.readLine();
System.out.println("your value is:"+str);
}
使用BufferedReader来取得输入,使用这个方法是固定的,每次使用前先如法炮制就可以了.BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
String text = buffer.readLine();
readLine()方法会返回用户在按下Enter键之前的所有字符输入,不包括最后按下的Enter返回字符.
这样我们就能获取我们输入的字符串。
优点: 可以获取键盘输入的字符串
缺点: 如何要获取的是int,float等类型的仍然需要转换
缺点: 如何要获取的是int,float等类型的仍然需要转换
Scanner类中的方法:
这种方法我认为是最简单,最强大的,就是用Scanner类import java.util.Scanner;
public static void main(String [] args){
Scanner sc= new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name= sc.nextLine();
System.out.println("请输入你的年龄:");
int age =sc.nextInt();
System.out.println("请输入你的工资:");
floatsalary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
}
这段代码已经表明,Scanner类不管是对于字符串还是整型数据或者float类型的变量,只需做一点小小的改变,就能够实现功能!无疑他是最强大的!
Scanner类中提供了多个方法:
next():取得一个字符串;
nextInt():将取得的字符串转换成int类型的整数;
nextFloat():将取得的字符串转换成float型;
nextBoolean():将取得的字符串转换成boolean型;用Scanner获得用户的输入非常的方便,但是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一键时,Scanner就会返回下一个输入.
优点一: 可以获取键盘输入的字符串
优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;
Scanner类中提供了多个方法:
next():取得一个字符串;
nextInt():将取得的字符串转换成int类型的整数;
nextFloat():将取得的字符串转换成float型;
nextBoolean():将取得的字符串转换成boolean型;用Scanner获得用户的输入非常的方便,但是Scanner取得输入的依据是空格符,包括空格键,Tab键和Enter键.当按下这其中的任一键时,Scanner就会返回下一个输入.
优点一: 可以获取键盘输入的字符串
优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;
但是,在使用第三种输入方法的时候有一个需要注意的地方,就是nextLine()函数,在io包中有一个和他功能一样的函数我next()函数,他们的功能一样,但是在实现上有什么差别呢,请看下面代码:
public staticvoid main(String [] args) {
Scanner sc = newScanner(System.in);
System.out.println("请输入你的年龄:");
int age =sc.nextInt();
System.out.println("请输入你的姓名:");
String name =sc.nextLine();
System.out.println("请输入你的工资:");
float salary =sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
}
这段代码和上边第三种实现输入方法给出的例子代码区别在于,这段代码先执行nextInit()再执行nextLine(),而第三种方法的例子是先执行nextLine(),再执行nextInit(),当你在运行着两段代码的时候你会发现第三种方法的例子可以实现正常的输入,而这段代码却在输入年龄,敲击enter键后,跳过了输入姓名,直接到了输入工资这里,(可以自己运行代码看看)这是为什么呢?其实,在执行nextInit()函数之后,敲击了enter回车键,回车符会被nextLine()函数吸收,实际上是执行了nextLine()函数吸收了输入的回车符(并不是没有执行nextLine函数),前面讲到和nextLine()功能一样的函数next(),他们的区别就在于:next()函数不会接收回车符和tab,或者空格键等,所以在使用nextLine()函数的时候,要注意敲击的回车符有个被其吸收,导致程序出现BUG!!!
scanner中 next()和nextLine()的区别:
在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。
所以在Java中如果想用回车换行进行多行输入,需要自己写一个for循环规定个数,或者在循环中写一个自定义的结尾符号,例如空格键就跳出来,否则程序不会识别回车,或者一直挑不出来。