浅谈 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 (就相当于返回一个元素)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值