Java 字符串分割

一、StringTokenizer 核心概述

StringTokenizerjava.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) 自定义分隔符 + 控制是否返回分隔符:returnDelimstrue时,分隔符本身也会作为标记返回;为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 () 对比

特性StringTokenizerString.split()
实现原理 普通字符匹配 正则表达式匹配
执行效率 更高(无正则开销) 较低(正则解析开销)
分隔符支持 单个字符集合(每个字符独立) 正则表达式(支持复杂规则)
空元素处理 自动忽略连续分隔符产生的空元素 默认保留空元素(可通过正则优化)
异常风险 无正则特殊字符风险 需处理正则特殊字符(如.*需转义)
使用场景 简单字符分割(空格、逗号等) 复杂分割场景(如按 “数字 + 字母” 规则分割)

总结

  1. StringTokenizer位于java.util包,需导入后使用,核心用于简单字符串分割,效率优于String.split()
  2. 核心构造方法分 3 种,可灵活选择默认分隔符、自定义分隔符,以及是否返回分隔符本身;
  3. 核心方法hasMoreTokens()(判断是否有剩余标记)、nextToken()(获取下一个标记)是循环遍历的关键;
  4. 适用场景:优先使用StringTokenizer处理空格、逗号等简单分割,复杂规则分割使用String.split()

posted on 2025-12-29 15:06  coding博客  阅读(0)  评论(0)    收藏  举报