为什么split()和StringTokenizer()表现不同

sha*_*yay -5 java regex string

 public class NewClass
{
    public static void main(String args[])
     {
        System.out.println("Operation 1");
        StringTokenizer st1 =
            new StringTokenizer("Hello   Geeks How are you", "\\s+");
            while (st1.hasMoreTokens())
            System.out.println(st1.nextToken());
            String s = "Hello   Geeks How are you";
            String s1[]= s.split("\\s+");
            System.out.println("Operation 2");

            for( String temp : s1) {
                System.out.println(temp);
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

执行代码后,我得到的输出为: -

Operation 1
Hello   Geek
 How are you
Operation 2
Hello
Geeks
How
are
you
Run Code Online (Sandbox Code Playgroud)

我不明白为什么split()和StringTokenizer()对相同的参数表现不同.

tob*_*s_k 7

所述delim的参数new StringTokenizer(str, delim)正则表达式.你告诉StringTokenizer在分裂任何\,s或者+,不是在"一个或多个空格字符".并且在你的字符串中唯一适用的字符是"Geeks"中的"s",因此字符串被分割.

如果要在空格(一个或多个)中拆分,只需使用不带参数的其他构造delim函数," \t\n\r\f"默认使用.