0

以下代码执行后s1、s2、s3的值是多少?

String s1, s2, s3="";
StringTokenizer line = new StringTokenizer("You are cool");
s1 = line.nextToken();
s2 = line.nextToken();
while (line.hasMoreTokens())
    s3 +=line.nextToken();

请注意,这是一个我找不到的学习指南问题。如果有人能彻底解释它,以便我可以在考试中提出这类问题,我将不胜感激。

4

3 回答 3

1

总之,这段代码是一个空格分隔的分词器,它将字符串分成三个部分。

因此,在这个特定示例中,s1、s2 和 s3 的值将是:

s1 = "You";
s2 = "are";
s3 = "cool";

要查看存储在其中的值,只需执行以下操作:

System.out.println(s1);
System.out.println(s2);
System.out.println(s3);

现在,至于为什么?

看到这个:

String s1, s2, s3="";//these are the strings that will hold the sub tokens

StringTokenizer line = new StringTokenizer("You are cool");//this initializes an object of the StringTokenizer class with a string value of "You are cool"
s1 = line.nextToken();//this reads up until the first whitespace character (which will be skipped)
s2 = line.nextToken();//this will read from the last position of the iterator
//this will continue reading tokens (delimited by whitespace) from the initialized
//StringTokenizer, (now at the position after "are"):
while (line.hasMoreTokens())
    s3 +=line.nextToken();//and those tokens are **appended** to s3! Note appended! Not stored in or overwritten to!

因此,声称*this 程序最多对字符串进行 3 次标记(通过空格)。

但是,你应该被警告:因为在 StringTokenizer 被初始化为这个的情况下:

"You are cool, bro"

(注意空格后面的额外空格和字符)

你会得到这个:

s1 = "You";
s2 = "are";
s3 = "cool,bro";//note the lack of whitespace!

最后一部分来自于在while循环中:

while (line.hasMoreTokens())
    s3 +=line.nextToken();//a nextToken() call skips over whitespace by default

因此,无论有多少, s3 都会从 追加下一个标记。line

于 2013-04-14T02:57:05.193 回答
0

正如@Dukeling 所提到的,您可能没有输出,因为您什么也没有打印出来。

另外,请看一下这个答案: 为什么不推荐使用 StringTokenizer?

来自 StringTokenizer 的 javadoc:StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。

于 2013-04-14T02:46:50.947 回答
0

字符串s1 s2 s3被实例化为空而不是 null

该变量line基本上是一个"You are cool"准备被标记化的新字符串 ( )。

每次您这样做nextToken()时,它都会获取一个单词或标记并将其存储在该变量中

所以这段代码将存储前两个单词。

s1 = line.nextToken();
s2 = line.nextToken();

此代码将查看它们是否是更多的单词或标记,它们是(左1)。然后它将获取最后一个令牌并将其分配给s3

while (line.hasMoreTokens()) {
    s3 +=line.nextToken();
}

输出方面,该程序不会在精神上将任何内容输出到控制台中,而是在内存中进行。这就是它在内存中的样子,如果你用System.out.println().

s1 = "You"

s2 = "are"

s3 = "cool"

于 2013-04-14T02:42:22.523 回答