无法理解以下简单程序的输出

时间:2017-10-07 13:17:25

标签: java stringtokenizer

/* A Java program to illustrate working of StringTokenizer
class:*/
import java.util.*;
public class NewClass
{
    public static void main(String args[])
    {


        System.out.println("Using Constructor 3 - ");
        StringTokenizer st3 = 
            new StringTokenizer("JAVA : Code : String", " :", true);
        while (st3.hasMoreTokens())
            System.out.println(st3.nextToken());
    }
}

为什么上述程序的输出如下:

Using Constructor 3 - 
JAVA

:

Code

:

String

我的问题是为什么它有额外的换行符(即它在“Java”,“:”,“Code”等之后有空行)

3 个答案:

答案 0 :(得分:1)

如果我们让打印更加冗长,那将会更加清晰:

while (st3.hasMoreTokens())
  System.out.printf("token: '%s'\n", st3.nextToken());

输出将是:

token: 'JAVA'
token: ' '
token: ':'
token: ' '
token: 'Code'
token: ' '
token: ':'
token: ' '
token: 'String'

如您所见,:是令牌。 这是因为指定的分隔符字符串:中的每个字符都用作分隔符。 并且您将true作为第3个参数传递给StringTokenizer的构造函数, 这使得它将分隔符作为标记返回。

StringTokenizer.html#StringTokenizer的JavaDoc中解释了这一点。

答案 1 :(得分:0)

因为构造函数中的true参数意味着将返回分隔符作为单独的标记。因此,除了单词之外,每个空格都会有一个标记(显示为空行),以及分号。

答案 2 :(得分:0)

您正在定义 - StringTokenizer 。由于“:”,它将按冒号和空格分割您的输入;你已经定义了两个标记,空格和冒号。接下来,您循环遍历标记并执行 println ,即每个标记打印一个新行。