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

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

1.public class BasicInput {2.3.    public static void main(String[] args) {4.        try {5.            String str = readUserInput();6.            System.out.println("您输入的是:" + str);7.        } catch (IOException e) {8.            e.printStackTrace();9.        }10.    }11.12.    /**13.     * 读取用户输入14.     *15.     * @return 用户输入16.     * @throws IOException 如果读取失败17.     */18.    private static String readUserInput() throws IOException {19.        InputStreamReader is_reader = new InputStreamReader(System.in);20.        return new BufferedReader(is_reader).readLine();21.    }22.}

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 如果用户输入的内容无效,则返回 true39.     */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("//d+");3.    }

str.matches(“//d+”) 用来判断字符串是不是全是数字。

到这里纵观整个代码,可以看得出来,Java 虽然在某些地方复杂,但只要稍 加整理,我们仍然可以得到逻辑结构合理的代码。

真正的强者,不是流泪的人,而是含泪奔跑的人。

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

相关文章:

你感兴趣的文章:

标签云: