StringTokenizer
java.lang.Object
|—java.util.StringTokenizer
public class StringTokenizer
extends Object
implements Enumeration<Object>
字符串标记器类允许应用程序将字符串分解为标记。 标记化方法比 StreamTokenizer 类使用的方法简单得多。 StringTokenizer 方法不区分标识符、数字和带引号的字符串,也不识别和跳过注释。
分隔符集(分隔标记的字符)可以在创建时指定,也可以基于每个标记指定。
StringTokenizer 实例的行为方式有两种,具体取决于它是使用 returnDelims 标志创建的,其值为 true 或 false:
- 如果标志为 false,则分隔符用于分隔标记。 记号是非分隔符的连续字符的最大序列。
- 如果标志为 true,则分隔符本身被视为标记。 因此,标记要么是一个分隔符,要么是非分隔符的最大连续字符序列。
StringTokenizer 对象在内部维护要标记化的字符串中的当前位置。 一些操作将当前位置推进到处理的字符之后。
通过获取用于创建 StringTokenizer 对象的字符串的子字符串来返回令牌。
以下是使用分词器的一个示例。 编码:
StringTokenizer st = new StringTokenizer("this is a test");
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
打印以下输出:
this
is
a
test
StringTokenizer 是一个遗留类,出于兼容性原因保留,但不鼓励在新代码中使用它。 建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。
以下示例说明了如何使用 String.split 方法将字符串分解为其基本标记:
String[] result = "this is a test".split("\\s");
for (int x=0; x<result.length; x++)
System.out.println(result[x]);
打印以下输出:
this
is
a
test
构造函数摘要
构造函数 | 描述 |
---|---|
StringTokenizer(String str) | 为指定的字符串构造一个字符串标记器。 |
StringTokenizer(String str, String delim) | 为指定的字符串构造一个字符串标记器。 |
StringTokenizer(String str, String delim, boolean returnDelims) | 为指定的字符串构造一个字符串标记器。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
int | countTokens() | 计算在生成异常之前可以调用此标记器的 nextToken 方法的次数。 |
boolean | hasMoreElements() | 返回与 hasMoreTokens 方法相同的值。 |
boolean | hasMoreTokens() | 测试此标记器的字符串中是否有更多标记可用。 |
Object | nextElement() | 返回与 nextToken 方法相同的值,只是它声明的返回值是 Object 而不是 String。 |
String | nextToken() | 从该字符串标记器返回下一个标记。 |
String | nextToken(String delim) | 返回此字符串标记器的字符串中的下一个标记。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造函数详细信息
StringTokenizer
public StringTokenizer(String str, String delim, boolean returnDelims)
为指定的字符串构造一个字符串标记器。 delim 参数中的所有字符都是分隔标记的分隔符。
如果 returnDelims 标志为 true,则分隔符也作为标记返回。 每个分隔符都作为长度为 1 的字符串返回。 如果标志为 false,则跳过分隔符,仅用作标记之间的分隔符。
请注意,如果 delim 为 null,则此构造函数不会引发异常。 但是,尝试在生成的 StringTokenizer 上调用其他方法可能会导致 NullPointerException。
参数:
参数名称 | 参数描述 |
---|---|
str | 要解析的字符串。 |
delim | 分隔符。 |
returnDelims | 指示是否将分隔符作为标记返回的标志。 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果 str 为空 |
StringTokenizer
public StringTokenizer(String str, String delim)
为指定的字符串构造一个字符串标记器。 delim 参数中的字符是分隔标记的分隔符。 分隔符本身不会被视为标记。
请注意,如果 delim 为 null,则此构造函数不会引发异常。 但是,尝试在生成的 StringTokenizer 上调用其他方法可能会导致 NullPointerException。
参数:
参数名称 | 参数描述 |
---|---|
str | 要解析的字符串。 |
delim | 分隔符。 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果 str 为空 |
StringTokenizer
public StringTokenizer(String str)
为指定的字符串构造一个字符串标记器。 分词器使用默认分隔符集,即“\t\n\r\f”:空格字符、制表符、换行符、回车符和换页符。 分隔符本身不会被视为标记。
参数:
参数名称 | 参数描述 |
---|---|
str | 要解析的字符串。 |
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果 str 为空 |
方法详情
hasMoreTokens
public boolean hasMoreTokens()
测试此标记器的字符串中是否有更多标记可用。 如果此方法返回 true,则后续调用不带参数的 nextToken 将成功返回令牌。
返回:
当且仅当在当前位置之后的字符串中至少有一个标记时才为 true; 否则为 false。
nextToken
public String nextToken()
从该字符串标记器返回下一个标记。
返回:
此字符串标记器的下一个标记。
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此标记器的字符串中没有更多标记。 |
nextToken
public String nextToken(String delim)
返回此字符串标记器的字符串中的下一个标记。 首先,将此 StringTokenizer 对象视为分隔符的字符集更改为字符串 delim 中的字符。 然后返回当前位置之后的字符串中的下一个标记。 当前位置超出了识别的标记。 新的分隔符集在此调用后仍为默认值。
参数:
参数名称 | 参数描述 |
---|---|
delim | 新的分隔符。 |
返回:
下一个标记,在切换到新的分隔符集之后。
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此标记器的字符串中没有更多标记。 |
NullPointerException | 如果 delim 为空 |
hasMoreElements
public boolean hasMoreElements()
返回与 hasMoreTokens 方法相同的值。 它的存在是为了让这个类可以实现 Enumeration 接口。
指定者:
接口 EnumerationObject 中的 hasMoreElements
返回:
如果有更多令牌,则为 true; 否则为 false。
nextElement
public Object nextElement()
返回与 nextToken 方法相同的值,只是它声明的返回值是 Object 而不是 String。 它的存在是为了让这个类可以实现 Enumeration 接口。
指定者:
接口 EnumerationObject 中的 nextElement
返回:
字符串中的下一个标记。
Throws:
Throw名称 | Throw描述 |
---|---|
NoSuchElementException | 如果此标记器的字符串中没有更多标记。 |
countTokens
public int countTokens()
计算在生成异常之前可以调用此标记器的 nextToken 方法的次数。 当前位置未提前。
返回:
使用当前分隔符集在字符串中剩余的标记数。