Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.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.util.Scanner有什么错?_Java - Fatal编程技术网

我对java.util.Scanner有什么错?

我对java.util.Scanner有什么错?,java,Java,这是我的Java 1.5代码(完整示例): 这里出了什么问题?基本上,正则表达式匹配任何以:开头的字符串,即使它只有一个字符::匹配表达式以及:a,:al:alpha。偶数:alpha;beta版是一个匹配 在表达式后面加上问号,即匹配尽可能短的字符串,即: 删除问号以使其贪婪: 但是,它将匹配:alpha;beta版,因此您需要指出,在分号或冒号字符之后,您需要除分号或冒号以外的任何字符: Pattern re = Pattern.compile("(;|:)[^;:]*"); 我认为Sca

这是我的Java 1.5代码(完整示例):


这里出了什么问题?

基本上,正则表达式匹配任何以
开头的字符串,即使它只有一个字符:
匹配表达式以及
:a
:al
<代码>:alpha。偶数
:alpha;beta版
是一个匹配

在表达式后面加上问号,即匹配尽可能短的字符串,即

删除问号以使其贪婪:

但是,它将匹配
:alpha;beta版
,因此您需要指出,在分号或冒号字符之后,您需要除分号或冒号以外的任何字符:

Pattern re = Pattern.compile("(;|:)[^;:]*");

我认为Scanner类的工作方式与您预期的不同

Scanner scanner = new Scanner(":alpha;beta");
scanner.useDelimiter("(;|:).*?");
System.out.println(scanner.next()); // gives alpha

如何证明调用
scanner.useDelimiter(“”)的合理性?如果您不使用它,您的匹配器工作得很好。

@chiccodoro,解释看起来是正确的,但它不会改变代码的行为:(即使使用
“(;(124;:)[^;:])*”
@Vincenzo:可能是Java特有的,默认情况下它不贪婪?那么我建议将您问题的标题改为“Regex与预期不匹配”。这更吸引人,因为Java.util.Scanner不如Regex。此外,在您的问题中包括这些新发现。@Vincenzo:如果您说
“(;|:)[^;:]+”
(注意结尾处的加号)?@chiccodoro,我刚刚用一个完整的JUnit示例更新了这个问题。它不起作用,但它应该……或者
+
或者
*
结尾处是同一个故事:(@Vincenzo:你为什么接受我的答案?你设法解决了吗?是什么让它起作用的?
Pattern re = Pattern.compile("(;|:)[^;:]*");
Scanner scanner = new Scanner(":alpha;beta");
scanner.useDelimiter("(;|:).*?");
System.out.println(scanner.next()); // gives alpha