分享一下我写的java监听控制台输入并可以给出响应的功能。

很多时候需要监听控制台的输入内容,相当于信号监听,根据输入的内容做出相应的动作,这里给出我的一个简单实现。

要注意的是:监听得到的消息中前后的空格和中间连续的多个空格会被忽略只保留一个空格,不区分大小写。

package com.idealisan.cores;import java.util.HashMap;
import java.util.Scanner;public class ConsoleListener {HashMap<String, Action> answers = new HashMap<String, ConsoleListener.Action>();Scanner scanner;Action defaultAction;/*** Add an action for a message.* @param message A string trimed. Ignore case. It has no inner space sequence of two spaces or more.* Example:"close connection"* @param action The method action.act() will be called when scanner get the message.*/public void addAction(String message, Action action) {answers.put(message.toLowerCase(), action);}/*** * @param scanner Usually new Scanner(System.in). * Will not be closed after listening.* @param defaultAction The defaultAction.act() method will be called if an action is not added for a message.*/public ConsoleListener(Scanner scanner, Action defaultAction) {this.scanner = scanner;this.defaultAction = defaultAction;if (scanner == null || defaultAction == null) {throw new NullPointerException("null params for ConsoleListener");}}public void removeAction(String message, Action action) {answers.remove(message, action);}public Action replaceAction(String message, Action action) {return answers.replace(message, action);}public void listenInNewThread() {Thread t = new Thread() {public void run() {listen();}};t.start();}/*** Use listenInNewThread() instead.* Listen to console input in current thread. It blocks the thread.*/public void listen() {while (true) {String line = scanner.nextLine();String msg = line.replaceAll("[\\s]+", " ");msg = msg.trim().toLowerCase();Action action = answers.get(msg);if (action == null) {action = defaultAction;}action.act(line);}}public static interface Action {public void act(String msg);}
}

演示:

package com.idealisan.test;import java.util.Scanner;import com.idealisan.cores.ConsoleListener;/*** Hello world!**/
public class App {public static void main(String[] args) {ConsoleListener cs = new ConsoleListener(new Scanner(System.in), new ConsoleListener.Action() {public void act(String msg) {System.out.println("Console: " + msg);}});cs.addAction("stop", new ConsoleListener.Action() {public void act(String msg) {System.out.println("Console: Bye");System.exit(0);}});cs.addAction("stop repeating", new ConsoleListener.Action() {public void act(String msg) {System.out.println("Console: ...");}});cs.listenInNewThread();while (true) {try {Thread.sleep(1);} catch (InterruptedException e) {// TODO Auto-generated catch block
                e.printStackTrace();}}}
}

转载于:https://www.cnblogs.com/memoryLost/p/11083131.html

java 监听控制台输入相关推荐

  1. C++开启后台线程监听控制台输入实现按任意键退出

    //通过开启后台线程监听控制台输入来实现按任意键退出 //也可以自行修改成其他键 vector<thread> threads; threads.push_back(thread([]() ...

  2. java edittext 输入监听_Android应用开发之Android EditText 监听用户输入完成的实例

    本文将带你了解Android应用开发Android EditText 监听用户输入完成的实例,希望本文对大家学Android有所帮助. 我们都知道, Android   EditText输入框,并没有 ...

  3. java swing列表数据加监听,【Java Swing公开课|Java监听列表项选择事件怎么用,看完这篇文章你一定就会了】- 环球网校...

    [摘要]作为一门面向对象编程语言,Java吸收了C++语言的优点,也展现了其强大的一面,我们能在各个地方看到其功能强大和简单易用的两个特征,当然,也吸引了很多程序员的注意力,所以就有人想了解Java的 ...

  4. vue输入框输入触发事件_.vue文件中监听input输入事件oninput详解

    .vue文件其实是一个组件,关于它的说明我之前也写过一篇文章,地址:.vue文件,今天这篇文章要讲的是.vue文件中监听input的输入值变化事件.需求是这页面中,改变input的值,就调用一个事件, ...

  5. jquery 监听input输入停止,实现文本框自动跳转

    今天学到了一个新的东西,在此记录一下 我遇到了一个这样的需求:添加扫描一条数据,无鼠标键盘.工具:扫描枪,动作:扫描两个条码 扫描抢扫描时,扫描出来的数据是显示在当前焦点上,用input的文本框来保存 ...

  6. php 监听条码枪输入,使用jQuery监听扫码枪输入并禁止手动输入的实现方法

    @(知识点总结)[jquery|扫码抢] 基于jQuery的扫码枪监听.如果只是想实现监听获取条码扫码信息,可以直接拿来使用,如果有更多的条码判断处理逻辑需要自己扩展. 一.功能需求 使用扫码枪扫描条 ...

  7. input框监听输入法输入中文

    input框监听输入法输入中文 需求 input事件 select为什么不能使用 注意select的onChange和onSearch 需求 想要在input框中进行接口实时查询,但是在使用输入法输入 ...

  8. Java监听mysql的binlog详解(mysql-binlog-connector)

    Java监听mysql的binlog详解(mysql-binlog-connector) 1. 需求概述 2. 技术选型 3. 方案设计 3.环境准备 3.1 查看是否开启binlog 3.2 mys ...

  9. 实时监听textField输入中文内容的时候拼音,拼音不跟着响应

    实时监听textField输入中文内容的时候拼音,拼音不跟着响应 - (void)viewDidLoad {[super viewDidLoad];UITextField *textField = [ ...

最新文章

  1. 【Luogu】P1613 跑路
  2. auto drop ssh failed ip address
  3. 使用PyCharm创建Django项目及基本配置
  4. python读取json文件转化为list_Python从所有子目录读取JSON文件
  5. Restlet框架– Hello World示例
  6. 2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础
  7. Linux(centos)系统各个目录的作用详解
  8. Python的内建属性和内建函数
  9. jsonp 返回以前必须要再转一次json
  10. 偏微分方程数值解法pdf_单摆-微分方程浅谈
  11. 微型计算机控制技术学科认识,微型计算机控制技术学习心得.docx
  12. 简单的Markdown解析器
  13. 千月最新影视APICLOUD完整安卓程序源码+UI非常不错
  14. 正则表达式经典教程-转
  15. 【py】pandas
  16. 小丁的Spring笔记一(概述)
  17. win 10 禁用键盘,下载vc
  18. 【无人机】基于Matlab实现无人机轨迹规划目标跟踪附论文报告和代码
  19. 分享一个简易的AT变速箱(TCU)换挡逻辑控制模型
  20. 从史上最热“五一”黄金周,聊聊中国人在百度地图大数据中“看”到什么

热门文章

  1. 【test】2015.7.31测试解题报告(一)
  2. SqlSugar 6.导航查询
  3. 使用LaTeX写数学公式
  4. 【http】微信网站使用的是http80端口或者https443端口访问
  5. Photoshop如何改变背景底色并调整照片尺寸和图像大小
  6. android图片裁剪xof,HttpServletResponse response相关头信息,内容信息设置
  7. 有多少个数既是 4 的整数倍,又是 6 的整数倍。
  8. maven下手动导入ojdbc6-12.1.0.1-atlassian-hosted.jar
  9. 计算机桌面有个方框,电脑屏幕的白色方框怎么清除
  10. activiti流程例子:详解员工请假流程的实现