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

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

package com.study;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner; public class InputFromCommandLine { public static void main(String[] args) { input2();
} private static void input1() { try (Scanner sc = new Scanner(System.in)) {
System.out.println("Input a num:");
int value = sc.nextInt();
System.out.println("Value Input:" + value);
} catch (Exception e) {
e.printStackTrace();
} } private static void input2() {
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
System.out.println("Input a num:");
String value = br.readLine();
System.out.println("Value Input:" + value);
} catch (IOException e) {
e.printStackTrace();
} } }

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

package com.thinkjava.book;
import java.util.Scanner; /**
* Demonstrates a common problem using Scanner.
* Scanner 获取的是字符流
*/
public class ScannerBug { public static void main(String[] args) {
String name;
int age;
Scanner in = new Scanner(System.in); System.out.print("What is your name? ");
name = in.nextLine();
System.out.print("What is your age? ");
age = in.nextInt();
System.out.printf("Hello %s, age %d\n", name, age); System.out.print("What is your age? ");
age = in.nextInt();
in.nextLine(); //读取换行符,加上这行以避开bug
System.out.print("What is your name? ");
name = in.nextLine();
System.out.printf("Hello %s, age %d\n", name, age);
} }

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

package com.thinkjava.book;
import java.util.Scanner; /**
* Converts centimeters to feet and inches.
*/
public class Convert { public static void main(String[] args) {
double cm;
int feet, inches, remainder;
final double CM_PER_INCH = 2.54;
final int IN_PER_FOOT = 12;
Scanner in = new Scanner(System.in); // prompt the user and get the value
System.out.print("Exactly how many cm? ");
cm = in.nextDouble(); // convert and output the result
inches = (int) (cm / CM_PER_INCH);
feet = inches / IN_PER_FOOT;
remainder = inches % IN_PER_FOOT;
System.out.printf("%.2f cm = %d ft, %d in\n",
cm, feet, remainder);
} }

以上是手动输入一个参数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包含程序的输出。


												

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. VirtualBox虚拟机网络环境Host-Only(对Win10和VirtualBox都有截图)

    之前在选择配置虚拟机网络环境的时候 桥接也是不错的,但是自己在使用的时候由于访问频繁会出现断网现象.所以就开始使用Host-Only模式.开始并不是很明白为什么这么设置,也挖了很多坑.经常出现虚拟机无 ...

  2. 零元学Expression Design 4 - Chapter 7 使用内建功能「Clone」来达成Path的影分身之术

    原文:零元学Expression Design 4 - Chapter 7 使用内建功能「Clone」来达成Path的影分身之术 本章所介绍的是便利且快速的内建工具Clone ? 本章所介绍的是便利且 ...

  3. MySQL—FTS实现原理介绍PPT

    这个PPT是有一天我要给同事讲解MySQL的FTS的实现原理花了一个小时做的.

  4. abp框架(aspnetboilerplate)设置前端报错显示

    abp在后端抛出异常 throw new UserFriendlyException($"抛出一个错误"); 在发布之前,需要设置是否把报错发送给前端 如果将此设置为true,则会 ...

  5. delphi备份恢复剪切板(使用了GlobalLock API函数和CopyMemory)

    看了季世平老兄的C++代码后翻译过来的 unit clipbak; interface uses SysUtils, Classes, Clipbrd, Windows, Contnrs; type ...

  6. Windows+Idea安装Hadoop开发环境

    前言:这种问题,本来不应该写篇博客的,但是实在是折磨我太久了,现在终于修好了,必须记一下,否则对不起自己的时间,对自己的博客道歉 *** 简介 环境:Windows 10+JDK1.8+Intelli ...

  7. delphi 实现微信开发(1) (使用kbmmw web server)

    原文地址:delphi 实现微信开发(1)作者:红鱼儿 大体思路: 1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员.) 2.kbmmw web server收到消息,生 ...

  8. Screensiz.es站收集整理了移动端的相关尺寸。

    Screensiz.es站收集整理了移动端的相关尺寸. Screensiz.es 彩蛋爆料直击现场 Screensiz.es站收集整理了移动端的相关尺寸.

  9. Excel求值表达式——太好用了

    这个需要通过宏表函数EVALUATE来实现,首先需要自定义名称.如果数据在A列,那么在B列自定义名称,按Ctrl+F3键,在“定义名称框”中选择“新建”,然后输入名称为“结果”,数据来源输入=EVAL ...

  10. MFC 中 Tooltip 实现的几种方式

    方法一:利用CWnd本身自身支持的tooptip来实现,这种方法适用给控件增加tooltip,非常方便和简单方法如下:1.在窗口中增加消息映射ON_NOTIFY_EX(TTN_NEEDTEXT, 0, ...