此处说明 两种使用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. 正定矩阵(definite matrix)

    1. 基本定义 在线性规划中,一个对称的 n×n 的实值矩阵 M,如果满足对于任意的非零列向量 z,都有 zTMz>0. 更一般地,对于 n×n 的 Hermitian 矩阵(原矩阵=共轭转置, ...

  2. matlab 基础知识class &lt; superclass_name

    matlab中的class,在matlab中也能够通过创建类的方式实现面向对象编程. 1)类定义 >> classdef (attribute1 = value,...) classnam ...

  3. CefSharp For WPF基本使用

    原文:CefSharp For WPF基本使用 Nuget引用 CefSharp.Wpf CefSharp.Common cef.redist.x64 cef.redist.x86 直接搜索安装Cef ...

  4. NPM镜像设置方法!

    使用npm安装一些包失败了的看过来(npm国内镜像介绍) 发布于 2012-4-26 04:19 最后一次编辑是 2013-12-11 23:21 这个也是网上搜的,亲自试过,非常好用! 镜像使用方法 ...

  5. halcon基础数据类型

    halcon基础数据类型 使用变量不需定义 等号       := 不等号    # 字符串赋值  str:='sdff' 等于比较符         if(q=0) 与       if(a< ...

  6. PostSharp-4.3.33安装包_KeyGen发布

    PostSharp-4.3.33安装包_KeyGen发布 请低调使用. PostSharp安装及注册步骤截图.rar 请把浏览器主页设置为以下地址支持本人.https://www.duba.com/? ...

  7. swagger-editor

    前言 上一篇文章我们有提到Swagger做接口的定义是采用yaml语言的,当然,yaml是个啥,大家自行百度.阿福在此不做赘述了.但是,今天我们要来讲的是yaml支持比较好的Swagger-Edito ...

  8. PHP获得指定日期所在月的第一天和最后一天

    function getdays($day){ $firstday = date('Y-m-01',strtotime($day)); $lastday = date('Y-m-d',strtotim ...

  9. win10 uwp 异步转同步

    原文:win10 uwp 异步转同步 有很多方法都是异步,那么如何从异步转到同步? 可以使用的方法需要获得是否有返回值,返回值是否需要. 如果需要返回值,使用GetResults 如从文件夹获取文件: ...

  10. System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序。

    今天在写导入Excel表格的代码,运行时却报异常,异常信息: System.InvalidOperationException: 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0 ...