java之字符串分解单词

最近在学java,碰到了一些很好用的方法,可以把字符串按照我们的要求分解成独立的单词,下面就来讲一下,有两种方法可以实现

split方法

这个方法比较简单,我们直接上代码

    String str = "this is a text.";
    String res[]=str.split(" |\\.");
    for(int i=0;i<res.length;i++)
        System.out.println(res[i]);
    System.out.println("这就话一共有"+res.length+"个单词");

输出结果

this
is
a
text
这句话一共有4个单词

括号内表示对什么进行分割,说的简单点,就是碰到什么就进行分割,比如我这里写的,碰到空格和 . 就进行分割,这里要主要,比如this…is,他只要碰到一个 . 就进行分割,也就是进入下一个单词,所以这里就不是两个单词了。
需要注意的是split表达式,其实就是一个正则表达式。* ^ | 等符号在正则表达式中属于一种有特殊含义的字符,如果使用此种字符作为分隔符,必须使用转义符即\加以转义。

StringTokenizer字符分析器

这个就比上面那个显得要专业一些,这个StringTokenizer是一个类,属于java.util包,所以我们首先需要调用这个包,这个类中有一些方法,下面来简单介绍一下。
hasMoreTokens():这个就是检测字符串中是否还有单词,是不是不太好理解?等讲完再回头看就可以理解啦。
nextToken():逐个获取字符串中的单词,也就是分割之后的单词。
countTokens():计算调用nextToken()的次数,这个就好理解多了。
下面上代码:

import java.util.*;
public class Main {
     
    public static void main(String[] args) {
     
    String str = "this is a text";
    StringTokenizer sc = new StringTokenizer(str,". ");
    int n=sc.countTokens();
    while(sc.hasMoreTokens())
    {
     
        String s = sc.nextToken();
        System.out.println(s);
    }
    System.out.println("这句话一共有"+n+"个单词");
    }
    }

运行结果:

this
is
a
text
这句话一共有4个单词

运行结果也是和上一个方法一样,那他们就是一模一样的吗?
当然有区别,比如我把StringTokenizer所分析的字符串改成this… is,他会出现几个单词呢?答案是2,对,两个单词,可以这么理解,split只要碰到以设定字符分割的任意一个就进行分割,比如中间有三个 . ,那么就碰到一个点,不管他后面有没有东西,把它后面的东西当成一个单词,一直这样循环下去,而StringTokenizer则是碰到设定分割字符,不管中间有几个分割符,直到出现下一个非设定分割字符作为下一个单词。
需要注意的一点是,在执行完StringTokenizer sc = new StringTokenizer(str,". “);或者String res[]=str.split(” |\.");这一步,就已经完成了对字符串的分割,下面的操作只是输出分割之后的单个单词。
那么出一个小问题:
1.String s =“this a text pte text pro.”
String res[]=s.split(“text”);
2.String s =“this a text te text pro.”
StringTokenizer sc = new StringTokenizer(s," text");
注:第二题的text前面有空格,空格也属于分割字符,这样便于结果的分析。
他们的运行结果是相等的吗?为什么?(可以尝试自己打一遍)

你可能感兴趣的:(java,java,正则表达式,字符串)