[英]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.