我不知道即使在使用java工作了几年后我是否忘记了我的基础知识。
我有一个有静态块的类
static {
Properties prop = new Properties();
try {
prop.load(new FileInputStream("PATH OF PROPERTIES FILE"));
String properties22 = (String) prop.getProperty("propertyname");
properties22Tokens = new StringTokenizer(properties22, ",");
while(properties22Tokens.hasMoreTokens())
{
System.out.print(":::"+properties22Tokens.nextToken());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我已在该变量上声明了公共静态声明,如下所示
public static StringTokenizer properties22Tokens;
我试图在下面的主要方法中打印令牌..但是没有令牌.. 哪个吃了代币?
public static void main(String arg[]) {
System.out.print("in main..");
while(properties22Tokens.hasMoreTokens())
{
System.out.print(":::"+properties22Tokens.nextToken());
}
}
输出是 - 来自主要的一些标记+在主..
我的预期输出 - 来自属性的一些标记+主要的.. +来自属性的一些标记
有人可以修理并解释修复程序吗?
答案 0 :(得分:2)
现在问题是为什么?
因为我们将创建StringTokenizer的对象并填充它。它将创建两个变量。一个用于StringTokenizer对象标记的总大小。第二,检查已经为您提供了多少令牌
在通过stringTokenizer调用hasMoreTokens()时,它将比较变量值和返回布尔值,它可能是true或false。
当通过stringTokenizer调用nextToken()时,它将增加变量的值,该变量是为了知道已经提供了多少令牌而创建的。
答案 1 :(得分:0)
你在静态块中“吃掉”它们。到main
发生时,while(properties22Tokens.hasMoreTokens())
将为假。
答案 2 :(得分:0)
StringTokenizer类打破标记中的字符串,并且可以使用nextToken
方法迭代标记。当您使用以下循环遍历静态块中的所有标记时:
while(properties22Tokens.hasMoreTokens())
{
System.out.print(":::"+properties22Tokens.nextToken());
}
因此hasMoreTokens
的任何进一步调用都将返回false
。因此,while
方法中的main
循环永远不会执行。