1

对于初级/中级程序员,使用 Scanner 类从控制台读取输入的替代方法有哪些?

我昨天开始看,谷歌带我看了一些关于自然语言处理的文章和一些自然语言处理工具包的列表。我发现的列表没有很好的注释,而且主题变得非常先进,非常快。

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

4

3 回答 3

4

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

你想达到这样的目标吗?

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
于 2012-12-14T16:35:20.380 回答
2

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

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

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

TL;博士

Flex: 字符串 -> 标记

Bison:令牌 -> 表达式树

你:表情树 -> 魔法

于 2012-12-14T16:45:47.597 回答
1

您可以使用 BufferedReaders 和 InputStreams 来完成。

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

于 2012-12-14T16:26:22.273 回答