Java 字符串分割
一、StringTokenizer 核心概述
StringTokenizer是java.util包下的专门用于字符串分割的工具类,它通过分隔符将目标字符串拆分为多个独立的字符串(称为标记 / Token)。相比String类的split()方法(基于正则表达式实现),StringTokenizer无需处理正则表达式的特殊字符,执行效率更高,更适合简单的字符分割场景(如按空格、逗号、分号等单一 / 多个字符分割)。二、StringTokenizer 构造方法
StringTokenizer提供了 3 个核心构造方法,满足不同分割需求:| 构造方法 | 说明 |
|---|---|
StringTokenizer(String str) |
默认构造方法:以空白字符(空格、制表符\t、换行符\n、回车符\r等)作为分隔符,自动忽略连续的空白字符 |
StringTokenizer(String str, String delim) |
自定义分隔符:delim为分隔符字符串(每个字符都是独立的分隔符,而非整体字符串),忽略连续分隔符产生的空元素 |
StringTokenizer(String str, String delim, boolean returnDelims) |
自定义分隔符 + 控制是否返回分隔符:returnDelims为true时,分隔符本身也会作为标记返回;为false时(默认值),仅返回分割后的业务字符串 |
三、StringTokenizer 常用方法
| 方法名 | 返回值 | 说明 |
|---|---|---|
hasMoreTokens() |
boolean |
判断是否还有未被提取的分割标记(循环遍历必备) |
nextToken() |
String |
获取下一个分割标记,若没有剩余标记会抛出NoSuchElementException |
countTokens() |
int |
获取剩余未被提取的标记总数(可用于提前查看分割结果数量) |
四、完整代码实例
实例 1:默认分隔符(空白字符)分割字符串
演示
StringTokenizer(String str)的使用,自动按空白字符分割,忽略连续空格。import java.util.StringTokenizer;
/**
* StringTokenizer 实例1:默认空白字符分隔符
*/
public class StringTokenizerDemo1 {
public static void main(String[] args) {
// 待分割字符串(包含空格、制表符\t)
String targetStr = "Java StringTokenizer 字符串分割\t演示实例";
// 1. 创建 StringTokenizer 对象(默认分隔符:空白字符)
StringTokenizer tokenizer = new StringTokenizer(targetStr);
// 2. 查看分割后的总标记数
System.out.println("分割后的总标记数:" + tokenizer.countTokens());
// 3. 循环遍历获取所有分割标记
System.out.println("分割结果:");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
System.out.println(token);
}
}
}
运行结果:
分割后的总标记数:5
分割结果:
Java
StringTokenizer
字符串分割
演示实例
实例 2:自定义分隔符分割字符串
演示
StringTokenizer(String str, String delim)的使用,指定多个自定义分隔符(逗号、分号、竖线)。import java.util.StringTokenizer;
/**
* StringTokenizer 实例2:自定义分隔符
*/
public class StringTokenizerDemo2 {
public static void main(String[] args) {
// 待分割字符串(包含逗号、分号、竖线分隔符)
String targetStr = "Java,Python;C++|Go;JavaScript,PHP";
// 1. 创建 StringTokenizer 对象,指定分隔符:, ; |(每个字符都是独立分隔符)
StringTokenizer tokenizer = new StringTokenizer(targetStr, ",;|");
// 2. 循环遍历获取分割标记
System.out.println("自定义分隔符分割结果:");
int index = 1;
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
System.out.println("第" + index + "个标记:" + token);
index++;
}
// 此时已无剩余标记,countTokens() 返回 0
System.out.println("遍历后剩余标记数:" + tokenizer.countTokens());
}
}
运行结果:
自定义分隔符分割结果:
第1个标记:Java
第2个标记:Python
第3个标记:C++
第4个标记:Go
第5个标记:JavaScript
第6个标记:PHP
遍历后剩余标记数:0
实例 3:返回分隔符本身的字符串分割
演示
StringTokenizer(String str, String delim, boolean returnDelims)的使用,设置returnDelims=true,将分隔符也作为标记返回。import java.util.StringTokenizer;
/**
* StringTokenizer 实例3:返回分隔符本身
*/
public class StringTokenizerDemo3 {
public static void main(String[] args) {
// 待分割字符串
String targetStr = "Apple,Banana;Orange|Grape";
// 分隔符
String delim = ",;|";
// 1. 创建 StringTokenizer 对象,设置返回分隔符(returnDelims=true)
StringTokenizer tokenizer = new StringTokenizer(targetStr, delim, true);
// 2. 循环遍历所有标记(包含分隔符)
System.out.println("包含分隔符的分割结果:");
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
System.out.println(token);
}
}
}
运行结果:
包含分隔符的分割结果:
Apple
,
Banana
;
Orange
|
Grape
五、StringTokenizer 与 String.split () 对比
| 特性 | StringTokenizer | String.split() |
|---|---|---|
| 实现原理 | 普通字符匹配 | 正则表达式匹配 |
| 执行效率 | 更高(无正则开销) | 较低(正则解析开销) |
| 分隔符支持 | 单个字符集合(每个字符独立) | 正则表达式(支持复杂规则) |
| 空元素处理 | 自动忽略连续分隔符产生的空元素 | 默认保留空元素(可通过正则优化) |
| 异常风险 | 无正则特殊字符风险 | 需处理正则特殊字符(如.、*需转义) |
| 使用场景 | 简单字符分割(空格、逗号等) | 复杂分割场景(如按 “数字 + 字母” 规则分割) |
总结
StringTokenizer位于java.util包,需导入后使用,核心用于简单字符串分割,效率优于String.split();- 核心构造方法分 3 种,可灵活选择默认分隔符、自定义分隔符,以及是否返回分隔符本身;
- 核心方法
hasMoreTokens()(判断是否有剩余标记)、nextToken()(获取下一个标记)是循环遍历的关键; - 适用场景:优先使用
StringTokenizer处理空格、逗号等简单分割,复杂规则分割使用String.split()。
浙公网安备 33010602011771号