繁体   English   中英

相同的正则表达式,但使用StringTokenizer和Scanner类分隔符给出不同的结果

[英]Same regex but giving different result with StringTokenizer and Scanner class delimiter

我试图使用StringTokenizer类分隔句子中的每个单词。 这对我来说可以。 但是我发现了使用Scanner类的另一种解决方案。我在两种方式中应用了相同的正则表达式但得到了不同的结果。 我想知道我得到的不同输出的原因,但表达方式相同。
这是我的代码:

String sentence = "I have some problems with this section!"
        + " But I love to learn.";


StringTokenizer st = new StringTokenizer(sentence, "[! ]");
System.out.println("========Using StringTokenizer=========");
while (st.hasMoreTokens()) {
    System.out.println(st.nextToken());
}


Scanner s = new Scanner(sentence);
s.useDelimiter("[! ]");
System.out.println("========Using Delimiter=========");
while (s.hasNext()) {
    System.out.println(s.next());

}

输出形式StringTokenizer:

========Using StringTokenizer=========
I
have
some
problems
with
this
section
But
I
love
to
learn.

使用Scanner类的输出:

========Using Delimiter=========
I
have
some
problems
with
this
section

But
I
love
to
learn.

这是因为Scanner可能匹配一个空String ,而StringTokonizer则不会。 在这种情况下,部分“部分!但是” Scanner匹配后面的空格! 符号,而StringTokenizer则没有。

扫描程序包含空匹配,而StringTokenizer则不包括。

由于这个原因, StringTokenizer无法正确解析具有有意义的索引列/字段(如/ etc / passwd或CSV)的分隔文件,因为它不会返回Scanner所有的列/字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM