此处说明 两种使用System.in获取键盘输入的两种方法,分别是Scanner 和 InputStreamReader.

其中System.in 在System类中的定义如下:

  1. package com.study;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.util.Scanner;
  7.  
  8. public class InputFromCommandLine {
  9.  
  10. public static void main(String[] args) {
  11.  
  12. input2();
  13. }
  14.  
  15. private static void input1() {
  16.  
  17. try (Scanner sc = new Scanner(System.in)) {
  18. System.out.println("Input a num:");
  19. int value = sc.nextInt();
  20. System.out.println("Value Input:" + value);
  21. } catch (Exception e) {
  22. e.printStackTrace();
  23. }
  24.  
  25. }
  26.  
  27. private static void input2() {
  28. try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
  29. System.out.println("Input a num:");
  30. String value = br.readLine();
  31. System.out.println("Value Input:" + value);
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35.  
  36. }
  37.  
  38. }

使用Scanner类时,需要注意,Scanner获取的是一个字符流。nextInt方法会不断读取字符,直到遇到非数字字符;nextLine会不断读取字符,直到遇到换行符。

  1. package com.thinkjava.book;
  2. import java.util.Scanner;
  3.  
  4. /**
  5. * Demonstrates a common problem using Scanner.
  6. * Scanner 获取的是字符流
  7. */
  8. public class ScannerBug {
  9.  
  10. public static void main(String[] args) {
  11. String name;
  12. int age;
  13. Scanner in = new Scanner(System.in);
  14.  
  15. System.out.print("What is your name? ");
  16. name = in.nextLine();
  17. System.out.print("What is your age? ");
  18. age = in.nextInt();
  19. System.out.printf("Hello %s, age %d\n", name, age);
  20.  
  21. System.out.print("What is your age? ");
  22. age = in.nextInt();
  23. in.nextLine(); //读取换行符,加上这行以避开bug
  24. System.out.print("What is your name? ");
  25. name = in.nextLine();
  26. System.out.printf("Hello %s, age %d\n", name, age);
  27. }
  28.  
  29. }

如下是一个通过System.in 方法获取键盘输入的方法,代码以及运行后的效果如下:

  1. package com.thinkjava.book;
  2. import java.util.Scanner;
  3.  
  4. /**
  5. * Converts centimeters to feet and inches.
  6. */
  7. public class Convert {
  8.  
  9. public static void main(String[] args) {
  10. double cm;
  11. int feet, inches, remainder;
  12. final double CM_PER_INCH = 2.54;
  13. final int IN_PER_FOOT = 12;
  14. Scanner in = new Scanner(System.in);
  15.  
  16. // prompt the user and get the value
  17. System.out.print("Exactly how many cm? ");
  18. cm = in.nextDouble();
  19.  
  20. // convert and output the result
  21. inches = (int) (cm / CM_PER_INCH);
  22. feet = inches / IN_PER_FOOT;
  23. remainder = inches % IN_PER_FOOT;
  24. System.out.printf("%.2f cm = %d ft, %d in\n",
  25. cm, feet, remainder);
  26. }
  27.  
  28. }

以上是手动输入一个参数193.04,之后由程序返回结果。

以下是通过命令行,将提供输入与实际输出的过程自动化。测试用例存储在纯文本文件中,并让Java以为这些输入来自键盘。

test.in.txt中存入测试用例,即参数193.04

在命令行中切换到Convert所在的目录,此处 test.in.txt 和Convert 类在同一个目录下:

在命令行中,<和>指的是重定向运算符。前者将test.in.txt 的内容重定向到 System.in,使得就像通过键盘输入了它们一样。后者将System.out的内容重定向到新文件test.out.txt,即test.out.txt包含程序的输出。

  1.  
  1.  

System.in 获取键盘输入的更多相关文章

  1. java利用Scanner获取键盘输入

    首发地址:我的网易博客 在运行一个java程序的时候,可能我们需要在运行的时候传递一些参数进去...咋办呢... java提供了一个Scanner类,利用这个类,我们可以很方便的获取键盘输入的参数.. ...

  2. 获取键盘输入或者USB扫描枪数据

    /// <summary> /// 获取键盘输入或者USB扫描枪数据 可以是没有焦点 应为使用的是全局钩子 /// USB扫描枪 是模拟键盘按下 /// 这里主要处理扫描枪的值,手动输入的 ...

  3. 使用Scanner获取键盘输入

    使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流 .字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同 ...

  4. java 获取键盘输入常用的两种方法

    java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...

  5. Java编程中获取键盘输入实现方法及注意事项

    Java编程中获取键盘输入实现方法及注意事项 1. 键盘输入一个数组 package com.wen201807.sort; import java.util.Scanner; public clas ...

  6. Java基础 - 获取键盘输入

    package com.demo3; import java.util.Scanner; /* * 使用 Scanner 获取键盘输入供程序使用 * * 使用步骤: * A:导包 * import j ...

  7. 【Java】Java_20 Scanner获取键盘输入

    使用Scanner类可以很方便的获取用户的键盘输入,Scanner是一个基于正则表达式子的文本扫描器,他可以从文件.输入流.字符串中解析出基本类型值和字符串值. 例子示意: package com.o ...

  8. 学习笔记7——使用Scanner获取键盘输入

    使用Scanner类可以很方面地获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件.输入流.字符串中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同的构 ...

  9. 使用Scanner获取键盘输入 (转)

    原文地址:https://www.cnblogs.com/SzBlog/p/5404335.html 后面有改动 使用Scanner类可以很方便地便获取用户的键盘输入,Scanner是一个基于正则表达 ...

随机推荐

  1. scrapy技术进阶-URL路径依赖

    方法1: #!/usr/bin/python # -*- coding: gbk -*- import time from scrapy.spider import BaseSpider from s ...

  2. 零元学Expression Design 4 - Chapter 4 教你如何自制超炫笔刷

    原文:零元学Expression Design 4 - Chapter 4 教你如何自制超炫笔刷 在Chapter 2 有稍微讲过Design内建笔刷的用法,本章将教大家如何自制独一无二的笔刷,并且重 ...

  3. 通通WPF随笔(2)——自己制作轻量级asp.net网站服务

    原文:通通WPF随笔(2)--自己制作轻量级asp.net网站服务 大学玩asp.net时就发现VS在Debug时会起一个web服务,这东西也太神奇了服务起得这么快,而相对于IIS又这么渺小. 前几个 ...

  4. Win8 Metro(C#)数字图像处理--2.36角点检测算法

    原文:Win8 Metro(C#)数字图像处理--2.36角点检测算法  [函数名称] Harris角点检测函数    HarrisDetect(WriteableBitmap src, int  ...

  5. SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication

    原文:SqlServer 无法为可更新的订阅设置发布服务器登录名 sp_link_publication 没有截图: 创建可更新订阅,正常创建了发布,在订阅端创建订阅,最后一步提示完成,却出现了警告: ...

  6. 零元学Expression Blend 4 - Chapter 31 看如何简单的把SampleData 绑进ListBox里

    原文:零元学Expression Blend 4 - Chapter 31 看如何简单的把SampleData 绑进ListBox里 前面几章连续讲到ListBox的运用,本章要讲得是如何简单的把Sa ...

  7. C#实现判断图形文件格式的方法

    1. 通过文件的扩展名来判断.这种方法比较简单,但若是有人故意改下文件扩展名,这种方法就不起作用了. 2.通过C#自身提供的方法来进行判断(判断某种确定的图片类型). 示例如下: bool isJPG ...

  8. DELPHI XE2 采用 JSON 的方式来序列化对象

    DELPHI XE2 采用 JSON 的方式来序列化对象 以下代码测试通过.问题是里面的中文,在反序列化后是乱码. 1. 序列化对象为字符串,Subject 里面的中文看起来正常,仍然是中文: 2.  ...

  9. MySQL 其它基本操作

    索引 所谓索引,就是类似于书的目录,目的也类似,都是为了提高检索速度.ALTER TABLE <表名> ADD INDEX <索引名(列名)>;或者CREATE INDEX & ...

  10. 静态dll的问题终于搞定了

    导入plugin,构建qapplicationhttps://forum.qt.io/topic/60940/qt-static-dll-x64-using-qapplication-issues/2 ...