useDelimiter()正在打印空白



我有一个字符串String url = "www.public.website.edu/~JohnSmith/JAVA000";。我的目标是使用分隔符来获得所需的输出,如下所示。

我确实有点得到了输出,但似乎有一行多余的字被打印出来了,我不完全确定它是从哪里来的。

代码:

public static void main(String[] args) {
String url = "www.public.website.edu/~JohnSmith/JAVA000";
Scanner scan = new Scanner(url);
scan.useDelimiter("[./~]");
while (scan.hasNext()) {
System.out.println(scan.next());
}

实际:

www
public
website
edu
JohnSmith
JAVA000

预期:

www
public
website
edu
JohnSmith
JAVA000

我不完全确定我的regex语法哪里出了问题。

next将继续读取您给扫描仪的字符串,直到找到分隔符,并返回读取的字符串。

让我们看看扫描仪读取edu后会发生什么。扫描仪的位置现在是:

www.public.website.edu/~JohnSmith/JAVA000
^

它从下一个字符开始阅读。它看到下一个字符~也是一个分隔符,因为它与[./~]正则表达式匹配,所以它停止在这里。扫描仪读取的非分隔符是什么?没有一个因此,next返回一个空字符串,然后打印该空字符串,从而显示空行。

如果您不喜欢空行,可以使用+量词指定分隔符为[./~]中的一个或多个字符

scan.useDelimiter("[./~]+");

这样,/~被视为一个分隔符,而不是两个单独的分隔符。