useDelimiter() 打印空 space

useDelimiter() printing empty space

我有一个字符串,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

我不完全确定我的正则表达式语法哪里出了问题。

next 将继续读取您提供给扫描仪的字符串,直到找到分隔符,然后 return 读取的字符串。

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

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

它从转到下一个字符开始阅读。它看到下一个字符 ~ 也是一个分隔符,因为它匹配 [./~] 正则表达式,所以它在这里停止。扫描仪读取了哪个 non-delimiter 字符? None!所以 next return 是一个空字符串,你打印那个空字符串,这会导致出现空行。

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

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

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