Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于控制台输入的Java Scanner类的替代方案_Java_Console_Java.util.scanner - Fatal编程技术网

用于控制台输入的Java Scanner类的替代方案

用于控制台输入的Java Scanner类的替代方案,java,console,java.util.scanner,Java,Console,Java.util.scanner,对于初级/中级程序员,除了使用Scanner类从控制台读取输入外,还有哪些替代方法 我昨天开始查找,谷歌带我看了一些关于自然语言处理的文章和一些自然语言处理工具包的列表。我发现的列表没有很好的注释,而且主题变得非常高级,非常迅速 我问这个问题是因为我开始想知道如何制作一个定界符的自定义列表,比如+|-|*|/。使用扫描仪似乎不可能做到这一点。您可以使用BufferedReader和InputStreams来实现 BufferedReader bufferRead=新的BufferedReader

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

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


我问这个问题是因为我开始想知道如何制作一个定界符的自定义列表,比如+|-|*|/。使用扫描仪似乎不可能做到这一点。

您可以使用BufferedReader和InputStreams来实现


BufferedReader bufferRead=新的BufferedReadernew InputStreamReaderSystem.in

您可以使用BufferedReader和InputStreams来完成

BufferedReader bufferRead=新的BufferedReadernew InputStreamReaderSystem.in

我开始想知道如何制作一个定界符的自定义列表,例如+|-|*|/。这似乎不可能使用扫描仪

你是不是想达到这样的目标

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
我开始想知道如何制作一个定界符的自定义列表,例如+|-|*|/。这似乎不可能使用扫描仪

你是不是想达到这样的目标

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和Bison将在您的程序中有效地创建一个迷你编译器,并使用它来解析输入,但这将使您能够比使用Scanner更好地处理上下文敏感的事情

TL;博士

Flex:String->Tokens

野牛:标记->表达式树


你:expressiontree->Magic

听起来你好像在写一个解释器,并且想要计算你传入的表达式

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

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

TL;博士

Flex:String->Tokens

野牛:标记->表达式树


您:Expression Tree->Magic

是否计划创建自定义分隔符列表或它们的自定义组合?因为Scanner允许您指定自己的分隔符模式。但听起来你希望分隔符是上下文敏感的?不确定你真正想要什么,但你可以使用正则表达式、indexOf、tokenizer等拆分字符串@Perception-是的,上下文敏感,因此如果有人输入一个简单的数学表达式,如3+5或4*2,我可以用扫描器或其他什么东西来解析它。@PhiLho-这就是我一直在做的事情,但我想知道谷歌的番石榴是否有什么东西可以帮我做到这一点。我不确定你想在扫描阶段处理这个问题,因为你需要分隔符和标记。读入整个输入字符串,然后对其进行解析,对于您所描述的内容会更好。您计划创建自定义分隔符列表还是自定义分隔符组合?因为Scanner允许您指定自己的分隔符模式。但听起来你希望分隔符是上下文敏感的?不确定你真正想要什么,但你可以使用正则表达式、indexOf、tokenizer等拆分字符串@Perception-是的,上下文敏感,因此如果有人输入一个简单的数学表达式,如3+5或4*2,我可以用扫描器或其他什么东西来解析它。@PhiLho-这就是我一直在做的事情,但我想知道谷歌的番石榴是否有什么东西可以帮我做到这一点。我不确定你想在扫描阶段处理这个问题,因为你需要分隔符和标记。读入整个输入字符串,然后对其进行解析,对于您所描述的内容会更好。是的,这就是我正在尝试做的。因此,您不必在useDelimiter参数中包含任何内容,以表明您希望它在您列出的参数之外继续使用空格?@e.inglewood不确定继续使用空格是什么意思。要在分隔符中包含空格,可以在分隔符前后使用\\s,如\\s*\+\\\\-\\*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。因此,您不必在useDelimiter参数中包含任何内容,以表明您希望它在您列出的参数之外继续使用空格?@e.inglewood不确定继续使用空格是什么意思。包括
分隔符中的空格您可以在其前后使用\\s,如\\s*\\+\\\\-\\\*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/\\s**表示前面有0个或多个元素。我会看看这两个。谢谢。我会看看这两个。