InputStream上的java正则表达式
我正在解析来自第三方硬件流的输入。这个东西打印出的信息是给人类的。它包括关键字和其他我不关心的字符。我想获取一个流,并用regex查找下一个出现的关键字。然后我可以执行一个switch
语句并找出发送了什么命令
我不能使用Scanner
类,因为读取被阻止,我不能中断它来停止线程。我也不能关闭该流作为一个工作区
有没有图书馆可以用来做我想在这里做的事情?我找到了Streamflyer,但这似乎有些过分,可能不是我想要的。它还建议FilterInputStream和FilterReader,但我不认为这些是我正在寻找的
# 1 楼答案
我有一个开源项目可以帮助解决这个问题,它比基于正则表达式的解决方案快得多:
http://mtimmerm.github.io/dfalex/
概述:
使用DfaBuilder为每个关键字生成一个匹配
.*KEYWORD
的DFA。指定该模式的最简单方法是Pattern.maybeRepeat(CharRange.ALL).then("KEYWORD");
调用build()将得到一个DfaState。依次为输入的每个字符调用
state=state.getNextState(c)
,每当你在关键字末尾时,都要声明。getMatch()将告诉您匹配了哪个关键字编辑: 这栋建筑是这样的:
然后像这样使用: