浅谈 StringTokenizer 类

本文介绍了StringTokenizer类在处理字符串分割时的优势,特别是其构造方法(包括无分隔符、指定分隔符和包含分隔符)以及常用的5个方法,如计数元素、判断是否有更多元素等,以解决split方法中正则表达式的困扰。
摘要由CSDN通过智能技术生成

一、背景介绍

最近在编写代码时以及在 牛客、leetcode 上刷题时,有时候会遇到需要对一个字符串进行几部分的截取 这样的需求场景。一般我都是使用 字符串 String 类自带的 split()方法 进行截取字符串,不过由于这个 split()方法 里传入的参数比较特殊,其传入的参数需要是 正则表达式 。譬如说:当前有个字符串 x = “aaa\tbbb\tccc”,我希望以 \t 为分隔符,将 x 截取,分成好几个字符串子串。如果此时使用 split()方法 截取,那么代码书写为如下形式:

public class testSplit {
    public static void main(String[] args) {
        String x = "aaa\tbbb\tccc";
        String[] xs = x.split("\\t");
        for (int i = 0; i < xs.length; i++) {
            System.out.println(xs[i]);
        }
    }
}

输出结果:在这里插入图片描述
在这里插入图片描述
从上面圈红框的地方,我们可以清楚的看到,split()方法 里的参数,并不是我们所指定的分隔符,是在我们指定的分隔符 \t 的基础上,又加了一个转义字符 \。这是因为 split()方法 里的参数要求必须是 正则表达式,我们所指定的分隔符 \t 在正则表达式中是表达着另一层含义的,是制表符的意思,此时就要加上转义字符,用来与正则表达式中的含义区分开来,此时的 \t 才能够真正生效。

因此使用 split()方法时,需要先对正则表达式有点了解才不至于出错,因此我通过查阅资料,找到了 StringTokenizer 类,该类同样具有与 split() 相同的效果,甚至于功能更加丰富。

二、简述 StringTokenizer 类的3个构造方法

StringTokenizer 类,其起到的作用与 split()方法 几乎一致,都是可以拿来截取字符串的。它可以跟 split() 一样自定义分隔符分割字符串,传入的参数也无需是正则表达式。当 StringTokenizer 没有指定分隔符时,其使用的是Java中默认的分隔符:空格、制表符\t、回车符\r、换页符f

StringTokenizer 类主要有 3 个 构造方法。

1、StringTokenizer(String str)
此构造方法,其要求传入的参数是一个字符串,然后其分割字符串的方式如下:

StringTokenizer st = new StringTokenizer("aaa bbb ccc");
while(st.hasMoreElements()){
         System.out.println(st.nextToken());
}

代码结果:
在这里插入图片描述
由于此构造方法只传入了一个字符串,没有指定分隔符,所以此时如果你传入的字符串没带有 Java 中默认的分隔符:空格、制表符\t、回车符\r、换页符\f。那么此时输出的字符串,仍旧是原样。看以下的例子:

public class testStringTokenizer {
    public static void main(String[] args) {
        StringTokenizer test = new StringTokenizer("aaa*bbb*ccc");
        while(test.hasMoreTokens()){
            System.out.println(test.nextToken());
        }
    }
 }

输出结果:
在这里插入图片描述
2、StringTokenizer(String str,String delim)
此构造方法意为:在传入一个字符串的同时,还指定了分隔符。此时就可以随意指定自己想要作为分隔符的字符了,并且此分隔符无需是 正则表达式。

public static void main(String[] args) {
//        使用构造方法2,指定分隔符为 *
        StringTokenizer st = new StringTokenizer("hhh*jjj*lll","*");
        while(st.hasMoreTokens()){
            System.out.println(st.nextToken());
        }
    }

运行结果:在这里插入图片描述

3、StringTokenizer(String str,String delim,boolean returnDelims)
此构造方法在构造方法2的基础上,加上了第3个参数,此参数的作用是:当为 true 时,表明分隔符作为一个元素返回,当为 false 时,分隔符不作为元素返回。

    public static void main(String[] args) {
//        使用构造方法3,指定分隔符为 *,同时分隔符作为元素返回
        StringTokenizer st = new StringTokenizer("hhh*jjj*lll","*",true);
        while(st.hasMoreTokens()){
            System.out.println(st.nextToken());
        }
    }

运行结果:
在这里插入图片描述

三、StringTokenizer 类中的方法

掌握了 StringTokenizer 类的3种构造方法后,还需要掌握 StringTokenizer 类中的常用方法,共有5个常用方法,这5个常用方法通常会搭配 StringTokenizer 类来使用,实现截取字符串的功能。

1、int countTokens() 此方法用来计算 StringTokenizer 对象中的元素个数

    public static void main(String[] args) {
//        使用构造方法2,指定分隔符为 *
        StringTokenizer st = new StringTokenizer("hhh*jjj*lll","*");
        int count = st.countTokens();
        System.out.println(count);
        while(st.hasMoreTokens()){
            System.out.println(st.nextToken());
        }
    }

运行结果:
在这里插入图片描述
我们指定了字符串的分隔符为 * ,因此此时通过 countTokens()方法 的计算,可知当前的 st 对象中所含元素个数为 3。

2、boolean hasMoreTokens() / boolean hasMoreElements() 这两个方法都是用来判定当前的 StringTokenizer 对象 中是否还有元素可遍历。返回 true 时,说明还有元素可遍历,返回 false 时,说明没有元素可以遍历了,此时就会退出循环。

3、Object nextElement() / boolean nextToken() 这两个方法都是用于返回对象中的一个Token (就相当于返回一个元素)

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java中的StringTokenizer是一个用于分解字符串的工具。它允许您将一个字符串分解成多个标记(tokens),并且可以指定分隔符。 StringTokenizer的构造函数有多个重载形式,其中最常用的是: public StringTokenizer(String str, String delim) 其中,str是要分解的字符串,delim是分隔符。如果不指定分隔符,则默认使用空格、制表符、换行符等空白字符作为分隔符。 StringTokenizer有三个主要的方法: 1. hasMoreTokens():判断是否还有更多的标记。 2. nextToken():返回下一个标记。 3. countTokens():返回剩余的标记数。 使用StringTokenizer可以方便地对字符串进行分解和处理,特别是在需要处理大量文本数据时,它可以提高程序的效率。 ### 回答2: java stringtokenizer是一个基于字符串分隔符的分词器。一个字符串可以有多个分隔符,而这些分隔符可以是不止一个字符的字符串。它允许程序员按照指定的分隔符对给定的字符串进行分割,返回一个分割后的字符串数组或逐个返回分隔符连接的标记。Java示例中常用的分隔符是空格字符、逗号和冒号。 使用java stringtokenizer,程序员可以轻松处理字符串,将其分解成若干单词或子字符串。相对于截取字符串的方式,它具有更明确、更灵活、更高效以及更容易调试的特点。 这个通常以两个参数的构造函数来调用。第一个参数是要分解的字符串,第二个参数是包含要用作分隔符的字符的字符串。在构造函数中,程序员可以选择在分割后返回空白标记,并选择将分隔符作为标记包含在返回的数组或逐个返回的标记中。 如果不使用Java stringtokenizer,程序员仍可以使用String和它所包含的substring()方法和indexOf()方法来完成对字符串的分割,但java stringtokenizer提供了一种更方便和容易使用的方式来处理字符串。 在java中,需要注意的是,java stringtokenizer在多线程环境下并不是线程安全的。如果多个线程同时使用同一个stringtokenizer实例,则可能会导致不可预期的结果。因此,建议在多线程环境下使用java.util.Scanner来进行字符串分割。 ### 回答3: java中的StringTokenizer是一个用于将字符串分解为若干个标记的工具。它可以将一个字符串根据给定的分隔符分解成多个字符串,也可以将一个字符串根据空格、制表符或换行符等默认分隔符分解成多个字符串,起到了非常方便的作用。 StringTokenizer的主要方法有三个,分别为构造方法、nextToken()和hasMoreTokens()。其中构造方法有两个重载形式,一种参数是(String str),另外一种参数是(String str,String delimiters),前者将使用默认的分隔符进行字符串分解,而后者则将指定的分隔符用于字符串分解。hasMoreTokens()方法用于判断是否还有标记未被分解,nextToken()方法用于获取下一个标记内容。 使用StringTokenizer需要结合循环来实现整个字符串的分割,下面是一个使用默认分隔符进行字符串分割的示例代码: ``` String str = "I am a boy"; StringTokenizer st = new StringTokenizer(str); while(st.hasMoreTokens()){ System.out.println(st.nextToken()); } ``` 上述代码会输出以下内容: I am a boy 在使用StringTokenizer时,需要注意以下几点: 1. 如果字符串中存在多个连续分隔符,StringTokenizer默认将把它们视为一个分隔符,也就是会输出空内容的标记。如果不希望输出空内容的标记,可以使用hasMoreElements()方法代替hasMoreTokens()方法。 2. StringTokenizer属于遗留API,在Java 1.5之后推荐使用String.split()方法代替。 3. StringTokenizer是线程不安全的,如果希望在多线程环境下使用,需要做好同步处理。 Java中的StringTokenizer可以快速地将字符串按照分隔符进行拆分,并且使用起来也非常简单。在一些字符串操作中,StringTokenizer也极为实用。不过,需要注意的是,由于StringTokenizer是一个遗留的API,使用时需要注意它的一些限制和安全性问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值