相同的正则表达式,但使用 StringTokenizer 和 Scanner class 分隔符给出不同的结果
Same regex but giving different result with StringTokenizer and Scanner class delimiter
我正在尝试使用 StringTokenizer
class 来分隔句子中的每个单词。这对我来说可以。但是我使用 Scanner
class.I 为我的案例找到了另一种解决方案,在两种方式中都应用了相同的正则表达式,但得到了不同的结果。我想知道我得到不同输出但表达相同的原因。
这是我的代码:
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.
使用扫描仪输出 class :
========Using Delimiter=========
I
have
some
problems
with
this
section
But
I
love
to
learn.
Scanner 包含空匹配,而 StringTokenizer 不包含。
StringTokenizer 无法正确解析具有有意义索引 columns/fields 的分隔文件,例如 /etc/passwd 或 CSV这是因为它不会 return 所有 columns/fields 而 Scanner 会。
因为Scanner
可能匹配空的String
,而StringTokonizer
则不会。在这种情况下,"section! But" Scanner
匹配 !
符号后的空格,而 StringTokenizer
不匹配。
我正在尝试使用 StringTokenizer
class 来分隔句子中的每个单词。这对我来说可以。但是我使用 Scanner
class.I 为我的案例找到了另一种解决方案,在两种方式中都应用了相同的正则表达式,但得到了不同的结果。我想知道我得到不同输出但表达相同的原因。
这是我的代码:
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.
使用扫描仪输出 class :
========Using Delimiter=========
I
have
some
problems
with
this
section
But
I
love
to
learn.
Scanner 包含空匹配,而 StringTokenizer 不包含。
StringTokenizer 无法正确解析具有有意义索引 columns/fields 的分隔文件,例如 /etc/passwd 或 CSV这是因为它不会 return 所有 columns/fields 而 Scanner 会。
因为Scanner
可能匹配空的String
,而StringTokonizer
则不会。在这种情况下,"section! But" Scanner
匹配 !
符号后的空格,而 StringTokenizer
不匹配。