Java 控制台 IO

来源:互联网 发布:关于人工智能的股票 编辑:程序博客网 时间:2024/06/05 09:04

记住一点  输入流输出流中的“输入” 和“输出” 都是相对于JVM内存来说的。

以下转自http://blog.csdn.net/yidinghe/article/details/3616260  觉得写的比较清晰

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

1、简单的获取用户输入

下面是一个基本的例子,包含解释

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

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

    public class BasicInput {        public static void main(String[] args) {            try {                String str = readUserInput();                System.out.println("您输入的是:" + str);            } catch (IOException e) {                e.printStackTrace();            }        }        /**         * 读取用户输入         *         * @return 用户输入         * @throws IOException 如果读取失败         */        private static String readUserInput() throws IOException {            InputStreamReader is_reader = new InputStreamReader(System.in);            return new BufferedReader(is_reader).readLine();        }    }

2、在读取之前显示提示文本
有时候需要在读取前显示一段文字。下面是继续改造后的例子:

    public class BasicInput {             public static void main(String[] args) {            try {                // 先提示一段文字,然后等待用户输入                String str = readUserInput("请输入您的年龄:");                System.out.println("您输入的是:" + str);            } catch (IOException e) {                e.printStackTrace();            }        }             /**         * 读取用户输入         *         * @param prompt 提示文字         * @return 用户输入         * @throws IOException 如果读取失败         */        private static String readUserInput(String prompt) throws IOException {            // 输出提示文字            System.out.print(prompt);            InputStreamReader is_reader = new InputStreamReader(System.in);            return new BufferedReader(is_reader).readLine();        }    }

3、不允许用户输入为空
这就要用到 while 循环,当用户输入为空(没有输入就直接回车)的时候重新要求输入。下面是将
readUserInput 方法改造后的例子:

  /**     * 读取用户输入     *     * @param prompt 提示文字     * @return 用户输入     * @throws IOException 如果读取失败     */    private static String readUserInput(String prompt) throws IOException {        // 先定义接受用户输入的变量        String result;         do {            // 输出提示文字            System.out.print(prompt);            InputStreamReader is_reader = new InputStreamReader(System.in);            result = new BufferedReader(is_reader).readLine();        } while (result.equals("")); // 当用户输入为空的时候,反复提示要求用户输入         return result;    }
为了更加灵活的判断,我们将 while 中的判断语句提取成一个单独的方法。然后整个代码变成这样:

    public class BasicInput {             public static void main(String[] args) {            try {                // 先提示一段文字,然后等待用户输入                String str = readUserInput("请输入您的年龄:");                System.out.println("您输入的是:" + str);            } catch (IOException e) {                e.printStackTrace();            }        }             /**         * 读取用户输入         *         * @param prompt 提示文字         * @return 用户输入         * @throws IOException 如果读取失败         */        private static String readUserInput(String prompt) throws IOException {            // 先定义接受用户输入的变量            String result;                 do {                // 输出提示文字                System.out.print(prompt);                InputStreamReader is_reader = new InputStreamReader(System.in);                result = new BufferedReader(is_reader).readLine();            } while (isInvalid(result)); // 当用户输入无效的时候,反复提示要求用户输入                 return result;        }             /**         * 检查用户输入的内容是否无效         *         * @param str 用户输入的内容         * @return 如果用户输入的内容无效,则返回 true         */        private static boolean isInvalid(String str) {            return str.equals("");        }    }

4、只允许用户输入数字
本例要求的是输入用户年龄。这是一个整数。为了避免得到非法的值,我们需要进一步对内容进行判断。因为之前我们将内容判断这一步单独提取出来,所以我们只要修改isInvalid 方法就行了。判断一个字符串是不是数字,用正则表达式是最简单的。下面是修改后的 isInvalid 方法:

 private static boolean isInvalid(String str) {        return str.equals("") || !str.matches("//d+");    }



原创粉丝点击