system: [SYSTEM]

user: 2. 方法介绍 下面就分别将Java语言中键盘输入数据的几种类和方法举例来说明，然后对其进行分析。 方法一：使用System.in.read()方法。 System.in返回的是InputStream指向命令行输入的字节流 [ 1 ] ，它的read方法以字节流的方式来读取命令行的输入的数据。 例题1：从键盘输入一个字符，然后打印出信息。 代码如下： import java.io.IOException; class shuru1 { public static void main(String args[ ]) throws IOException { System.out.print (你喜欢Java吗(Y/N) ); char like = (char)System.in.read(); if (like =='Y'|| like == 'y') System.out.println(Good); } } 运行结果如下： 你喜欢Java吗(Y/N)y Good 分析：这种方式实现了从键盘获取输入的字符，但是System.in.read()只能接收一个字符，也就是如果在输入数据的过程中输入了多个字符，那么like变量中只会接收第一个字符。而且，获取的数据的类型只能是char类型，如果我们想输入一个数字，希望得到的也是一个整型变量的时候，我们就需要对其接收到的数据进行类型的转换。 例题2：从键盘输入一个成绩，判断是否及格。 代码如下： import java.io.IOException; public class shuru2 { public static void main(String args[ ]) throws IOException { System.out.println(请输入你的成绩: ); char a = (char)System.in.read(); char b = (char)System.in.read(); int score = (a-'0')*10+b-'0'; //将字符类型的数字转换成整型的完整的成绩 if (score >= 60) System.out.println(你及格了); else System.out.println(你没及格！); } } 分析： 1) 由于System.in.read()只能从键盘输入一个数字存到一个变量中，并且该数字是char类型的，想接收第二个数字就需要存到第二个变量中，但实际运行过程中有的时候是输入一位数字成绩信息，有的时候是两位，有的时候是三位，因此此程序代码就很难满足这些各种可能性，此代码只能对接收两位的数字起作用，因此System.in.read()方法来达到键盘输入数据并不灵活。 2) System.in.read()由于接收的是char类型的数据，但成绩应该是整型或是float或double类型才能判断及格还是不及格，这就需要进行类型转换。 由此可以得出结论，如果想从键盘输入的数据是一位字符并且是char类型的话可以使用System.in.read()方法；如果想输入的数据是多于一个字符的话，并且需要输入的数据是其他类型的话，该System.in.read()的方法不合适。 方法二：使用StringBuffer类、append()方法 [ 2 ] 。 StringBuffer类和String一样，也用来代表字符串，只是由于StringBuffer的内部实现方式和String不同，所以StringBuffer在进行字符串处理时，不生成新的对象，在内存使用上要优于String类。所以在实际使用时，如果经常需要对一个字符串进行修改，例如插入、删除等操作，使用StringBuffer要更加适合一些。 append()方法的作用是追加内容到当前StringBuffer对象的末尾，类似于字符串的连接。 例题3：从键盘输入一个字符串，当输入回车符时停止输入，打印出输入的字符串。 代码如下： import java.io.IOException; class shuru3 { public static void main(String args[ ]) throws IOException { char c; StringBuffer buffer = new StringBuffer(); System.out.println(输入一个字符串以回车符表示结束); c = (char) System.in.read(); while (c!='\r'){ buffer.append(c); c = (char) System.in.read(); } System.out.println(Output = + buffer.toString()); } } 运行结果如下： 输入一个字符串以回车符表示结束 abc Output =abc 分析：该例题中使用了StringBuffer类和System.in.read()方法，在该例题中用循环的方式接收多个字符并且字符个数任意，直到输入回车符结束循环。此方式克服了方法一中只能接收单字符的缺陷，可以输入任何长度的字符，可以通过buffer.toString()输出整个字符串的信息，如果想把字符串的信息转换成别的类型就需要用相应的类型转换方法。 方法三：使用BufferedReader类和InputStreamReader类 [ 1 ] 。 InputStreamReader类提供了字节流到字符流的转换。 BufferedReader类它从字符流中读取文本，并且使用字符缓冲器来提高读取效率。 例题4：从键盘输入一个字符串，然后将其打印出来。 import java.io.*; class shuru4 { public static void main(String [ ] args) throws IOException{ BufferedReader a = new BufferedReader(new InputStreamReader(System.in)); String s = null; System.out.print (请输入数据:); s = a.readLine(); System.out.println(打印出输入的数据:+s); } } 运行结果如下： 请输入数据:abcd 打印出输入的数据:abcd 分析：该例题从键盘输入任何长度的字符串数据都可以，按回车符结束输入打印出信息。如果想将输入的字符串数据转换成其它类型的话，使用相应的转换方法就可。 方法四：使用Scanner类、nextLine()、nextInt()、nextFloat()等方法 [ 3 ] Scanner 被称为输入流扫描器类，从控制台读取数据的。Scanner类是一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。 例题5：从键盘输入多种类型的数据，然后输出这些数据。 import java.util.Scanner; class shuru5 { 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(请输入你的成绩：); float score = sc.nextFloat(); System.out.println(你的信息如下：); System.out.println(姓名：+name+\n+年龄：+age+\n+成绩：+score); } } 请输入你的姓名： aaa 请输入你的年龄： 20 请输入你的成绩： 67.5 你的信息如下： 姓名：aaa 年龄：20 成绩：67.5 分析：这段代码已经表明，Scanner类不管是对于字符串数据还是整型数据或者float类型的数据，只需做一点小小的改变，就能够实现所需要的功能，无疑它是使用起来最方便的。