java 控制台 键盘监听_java 监听控制台输入

packagecom.idealisan.cores;importjava.util.HashMap;importjava.util.Scanner;public classConsoleListener {

HashMap answers = new HashMap();

Scanner scanner;

Action defaultAction;/*** Add an action for a message.

*@parammessage A string trimed. Ignore case. It has no inner space sequence of two spaces or more.

* Example:"close connection"

*@paramaction The method action.act() will be called when scanner get the message.*/

public voidaddAction(String message, Action action) {

answers.put(message.toLowerCase(), action);

}/***

*@paramscanner Usually new Scanner(System.in).

* Will not be closed after listening.

*@paramdefaultAction The defaultAction.act() method will be called if an action is not added for a message.*/

publicConsoleListener(Scanner scanner, Action defaultAction) {this.scanner =scanner;this.defaultAction =defaultAction;if (scanner == null || defaultAction == null) {throw new NullPointerException("null params for ConsoleListener");

}

}public voidremoveAction(String message, Action action) {

answers.remove(message, action);

}publicAction replaceAction(String message, Action action) {returnanswers.replace(message, action);

}public voidlistenInNewThread() {

Thread t= newThread() {public voidrun() {

listen();

}

};

t.start();

}/*** Use listenInNewThread() instead.

* Listen to console input in current thread. It blocks the thread.*/

public voidlisten() {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 interfaceAction {public voidact(String msg);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值