Java的Scanner类替代控制台输入

时间:2012-12-14 16:19:45

标签: java console java.util.scanner

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

我昨天开始寻找,谷歌带我去看一些关于自然语言处理和一些自然语言处理工具包的文章。我找到的列表没有很好的注释,主题非常快,非常快。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

听起来你正在写一个翻译,并且想要评估你传入的表达。

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

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

TL; DR

Flex:String - >令牌

野牛:代币 - >表达树

你:表达树 - >魔术