Java 小例子:读取控制台的用户输入

想当年学 BASIC 的时候,获取用户输入多简单,就一个 input;后来学 C,也挺简单,一个 scanf();后来学 c++,同样简单,一个 cin <<;到了 Java 这里,麻烦来了。

1、简单的获取用户输入

下面是一个基本的例子,包含解释:
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.io.IOException;

  4. public class BasicInput {

  5.     public static void main(String[] args) {
  6.         try {
  7.             // 在 Java 当中,用户输入要通过 InputStream (输入流)来获取。
  8.             // System.in 就是系统的输入流。缺省情况下这个输入流连接到控制台(命令行)。
  9.             // InputStreamReader 就是用来读取 InputStream 的类。
  10.             InputStreamReader is_reader = new InputStreamReader(System.in);
  11.             
  12.             // 通常使用 BufferedReader 来读取 InputStream 中的字符串内容。
  13.             // BufferedReader 可以一次读取一行。
  14.             String str = new BufferedReader(is_reader).readLine();
  15.             
  16.             // 将读取的字符串输出到屏幕上。
  17.             System.out.println("您输入的是:" + str);
  18.         } catch (IOException e) {
  19.             e.printStackTrace();
  20.         }
  21.     }
  22. }


看起来不少,实际上只有三行。下面将前面两行提取出来,放到单独的方法中,就成了下面这个样子(前面的 import 我就省掉了):
  1. public class BasicInput {

  2.     public static void main(String[] args) {
  3.         try {
  4.             String str = readUserInput();
  5.             System.out.println("您输入的是:" + str);
  6.         } catch (IOException e) {
  7.             e.printStackTrace();
  8.         }
  9.     }

  10.     /**
  11.      * 读取用户输入
  12.      *
  13.      * @return 用户输入
  14.      * @throws IOException 如果读取失败
  15.      */
  16.     private static String readUserInput() throws IOException {
  17.         InputStreamReader is_reader = new InputStreamReader(System.in);
  18.         return new BufferedReader(is_reader).readLine();
  19.     }
  20. }


2、在读取之前显示提示文本

有时候需要在读取前显示一段文字。下面是继续改造后的例子:
  1. public class BasicInput {
  2.  
  3.     public static void main(String[] args) {
  4.         try {
  5.             // 先提示一段文字,然后等待用户输入
  6.             String str = readUserInput("请输入您的年龄:");
  7.             System.out.println("您输入的是:" + str);
  8.         } catch (IOException e) {
  9.             e.printStackTrace();
  10.         }
  11.     }
  12.  
  13.     /**
  14.      * 读取用户输入
  15.      *
  16.      * @param prompt 提示文字
  17.      * @return 用户输入
  18.      * @throws IOException 如果读取失败
  19.      */
  20.     private static String readUserInput(String prompt) throws IOException {
  21.         // 输出提示文字
  22.         System.out.print(prompt);
  23.         InputStreamReader is_reader = new InputStreamReader(System.in);
  24.         return new BufferedReader(is_reader).readLine();
  25.     }
  26. }

3、不允许用户输入为空

这就要用到 while 循环,当用户输入为空(没有输入就直接回车)的时候重新要求输入。下面是将  readUserInput 方法改造后的例子:
  1.     /**
  2.      * 读取用户输入
  3.      *
  4.      * @param prompt 提示文字
  5.      * @return 用户输入
  6.      * @throws IOException 如果读取失败
  7.      */
  8.     private static String readUserInput(String prompt) throws IOException {
  9.         // 先定义接受用户输入的变量
  10.         String result;
  11.  
  12.         do {
  13.             // 输出提示文字
  14.             System.out.print(prompt);
  15.             InputStreamReader is_reader = new InputStreamReader(System.in);
  16.             result = new BufferedReader(is_reader).readLine();
  17.         } while (result.equals("")); // 当用户输入为空的时候,反复提示要求用户输入
  18.  
  19.         return result;
  20.     }

为了更加灵活的判断,我们将 while 中的判断语句提取成一个单独的方法。然后整个代码变成这样:
  1. public class BasicInput {
  2.  
  3.     public static void main(String[] args) {
  4.         try {
  5.             // 先提示一段文字,然后等待用户输入
  6.             String str = readUserInput("请输入您的年龄:");
  7.             System.out.println("您输入的是:" + str);
  8.         } catch (IOException e) {
  9.             e.printStackTrace();
  10.         }
  11.     }
  12.  
  13.     /**
  14.      * 读取用户输入
  15.      *
  16.      * @param prompt 提示文字
  17.      * @return 用户输入
  18.      * @throws IOException 如果读取失败
  19.      */
  20.     private static String readUserInput(String prompt) throws IOException {
  21.         // 先定义接受用户输入的变量
  22.         String result;
  23.  
  24.         do {
  25.             // 输出提示文字
  26.             System.out.print(prompt);
  27.             InputStreamReader is_reader = new InputStreamReader(System.in);
  28.             result = new BufferedReader(is_reader).readLine();
  29.         } while (isInvalid(result)); // 当用户输入无效的时候,反复提示要求用户输入
  30.  
  31.         return result;
  32.     }
  33.  
  34.     /**
  35.      * 检查用户输入的内容是否无效
  36.      *
  37.      * @param str 用户输入的内容
  38.      * @return 如果用户输入的内容无效,则返回 true
  39.      */
  40.     private static boolean isInvalid(String str) {
  41.         return str.equals("");
  42.     }
  43. }

4、只允许用户输入数字
本例要求的是输入用户年龄。这是一个整数。为了避免得到非法的值,我们需要进一步对内容进行判断。因为之前我们将内容判断这一步单独提取出来,所以我们只要修改  isInvalid 方法就行了。判断一个字符串是不是数字,用正则表达式是最简单的。下面是修改后的 isInvalid 方法:
  1.     private static boolean isInvalid(String str) {
  2.         return str.equals("") || !str.matches("^[0-9_]+$");
  3.     }

str.matches("^[0-9_]+$") 用来判断字符串是不是全是数字。

到这里纵观整个代码,可以看得出来,Java 虽然在某些地方复杂,但只要稍加整理,我们仍然可以得到逻辑结构合理的代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值