用于控制台输入的 Java 扫描程序类的替代方案



对于初级/中级程序员来说,使用 Scanner 类从控制台读取输入的替代方法是什么?

昨天开始寻找,谷歌带我看了一些关于自然语言处理的文章和一些自然语言处理工具包列表。我找到的列表注释不是很好,主题很快就变得非常先进。

我问是因为我开始想知道制作一个自定义的分隔符列表,例如"+" |"-" |"*" |"/".使用扫描仪似乎无法做到这一点。

我开始想知道制作一个自定义的分隔符列表,例如"+" |"-" |"*" |"/".使用扫描仪似乎无法做到这一点。

你想实现这样的事情吗?

String text="Some text +with -delimiters *described /above";
Scanner in=new Scanner(text);
in.useDelimiter("\+|\-|\*|/"); // +,-,* are metacharacters in regex
                                  // to escape its special meaning we need 
                                  // to use "\" before each of them
int counter=0;
while(in.hasNext())
    System.out.println(counter++ +") "+ in.next());

输出

0) Some text 
1) with 
2) delimiters 
3) described 
4) above

听起来你正在编写一个解释器,并且想要评估你传入的表达式。

我的建议是查看Flex,它将对您的输入进行词法分析并将其转换为令牌。然后看看 Gnu Bison,它将采用该令牌集,并将它们解析为表达式树。

Flex和Bison将有效地在程序内部创建一个"迷你编译器",并使用它来解析输入,但这将使您比使用Scanner更好地处理上下文相关的事情。

博士

弹性:字符串 -> 令牌

野牛:代币 -> 表达式树

你:表情树->魔法

您可以使用 BufferedReader 和 InputStreams 来做到这一点。

BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));

最新更新