欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中字符序列的替换与分解的几种实现方法

程序员文章站 2023-01-04 12:31:27
一、使用string类string对象调用public string replaceall(string regex,string replacement)方法,返回一个新的string对象,返回的s...

一、使用string类

string对象调用public string replaceall(string regex,string replacement)方法,返回一个新的string对象,返回的string对象的字符序列是把当前string对象的字符序列中,所有和参数regex相匹配的子字符序列替换成参数replacement指定的字符序列所得到的字符序列。

例如:

再如:

其实,string类提供了一个实用的方法:

当string对象调用该方法时,使用参数指定的正则表达式regex作为分隔标记,分解出string对象的字符序列中的单词,并将分解出的单词存放在string数组中。

例如:

需要特别注意的是,split方法认为分隔标记的左右是单词,额外规则是,如果左面的单词是不含任何字符的字符序列,即为空,则这个字符序列仍然算成一个单词,但右边的单词必须是含有字符的字符序列。
例如:

二、使用stringtokenizer类

1.和split()方法不同的是,stringtokenizer对象不使用正则表达式做分隔标记。
2.当分析一个字符序列并将字符序列分解成可被独立使用的单词时,可以使用java.util包中的stringtokenizer类,称该类的对象是一个字符序列的分析器,该类有两个构造方法。
构造方法1:stringtokenizer(string s):构造一个stringtokenizer对象,例如fenxi。fenxi使用的是默认的分隔标记(空格符,换行符,回车符,tab符,进纸符(\f))分解出参数s的字符序列中的单词,即这些单词成为分析中的数据。
构造方法2:stringtokenizer(string s,string delim):构造一个stringtokenizer对象,例如fenxi。fenxi用参数delim的字符序列中的字符的任意排列作为分隔标记,分解出参数s的字符序列中的单词,即这些单词成为fenxi中的数据。
注意:分隔标记的任意排列仍然是分隔标记。
3.fenxi可以调用string nexttoken()方法逐个获取fenxi中的单词,每当nexttoken()返回一个单词,fenxi就会自动删除该单词。
4.fenxi可以调用boolean hasmoretokens()方法返回一个boolean值,只要fenxi中还有单词,该方法就返回true,否则返回false。
5.fenxi可以调用counttoken()方法返回当前fenxi中单词的个数。

具体示例1:

具体示例2:

三、使用scanner类

为了创建一个scanner对象,需要把一个string对象传递给所构造的scanner对象,例如,对于:

为了解析出s的字符序列中的数字型单词,可以如下构造一个scanner对象:

那么scanner默认使用空格作为分隔标记来解析s的字符序列中的单词。也可以让scanner对象调用方法:

将正则表达式作为分隔标记,即scanner对象在解析s的字符序列时,把与正则表达式匹配的字符序列作为分隔标记。
scanner对象解析字符序列的特点如下:

  • scanner对象调用next()方法依次返回s的字符序列中的单词,如果最后一个单词已被next()方法返回,scanner对象调用hasnext()将返回false,否则返回true。
  • 对于s的字符序列中的数字型单词,例如,12.34等,scanner可以调用nextint()或nextdouble()方法来代替next()方法。即scanner可以调用nextint()或nextdouble()方法将数字型单词转化为int型或者double型数据返回。
  • 如果单词不是数字型单词,scanner调用nextint()或nextdouble()方法,将会发生inputmismatchexception异常,在处理异常时可以调用next()方法返回该非数字化单词。

具体示例:

对比:

1. stringtokenizer类和scanner类都可用于分解字符序列中的单词,但是二者在思想上有所不同。

2. stringtokenizer类把分解出来的单词全都放入stringtokenizer对象的实体中,因此stringtokenizer对象能够快速的获得单词,即stringtokenizer对象的实体占用较多的内存(多占用内存,提升速度,相当于把单词记在大脑中)。

3. 与stringtokenizer类不同的是,scanner类仅仅存放怎样获取单词的分隔标记,因此scanner对象获取单词的速度相对较慢,但scanner对象节省内存空间(减慢速度,节省空间,相当于把单词放在字典里,大脑只记忆查字典的规则)。

四、使用pattern类与matcher类

使用pattern类与matcher类的步骤如下:

1.使用正则表达式regex作为参数得到一个称为"模式"的pattern类的实例pattern。例如

2.模式对象pattern调用matcher(charsequence s)方法返回一个matcher对象matcher,称为匹配对象,参数s是matcher要检索的string对象。

3.这两个步骤结束后,匹配对象matcher就可以调用各种方法检索s。

具体方法有:

(1)public boolean find():寻找s的字符序列中和regex匹配的下一子序列。如果成功则返回true,否则返回false。matcher首次调用该方法时,寻找s中第一个和regex匹配的子序列,如果find方法返回true,则matcher再调用find方法时,就会从上一次匹配成功的子字符序列后开始寻找下一个匹配regex的子字符序列。另外,当find方法返回true时,matcher可以调用start()方法和end()方法得到子字符序列在s中的开始位置和结束位置。当find方法返回true时,matcher调用group()可以返回find方法本次找到的匹配regex的子字符序列。
(2)public boolean matches():matcher调用该方法判断s的字符序列是否完全和regex匹配。
(3)public boolean lookingat():matcher调用该方法判断从s的字符序列的开始位置是否有和regex匹配的子字符序列。
(4)public boolean find(int start):matcher调用该方法判断s的字符序列从参数start指定位置开始是否有个regex匹配的子字符序列。当start=0时,该方法和lookingat()的功能相同。
(5)public string replaceall(string replacement):matcher调用该方法可以返回一个string对象,该string对象的字符序列是通过把s的字符序列中与模式regex匹配的子字符序列全部替换为参数replacement指定的字符序列得到的(注意s本身没有发生变化)。
(6)public string replacefirst(string replacement):matcher调用该方法可以返回一个string对象,该string对象的字符序列是通过把s的字符序列中第1个与模式regex匹配的子字符序列全部替换为参数replacement指定的字符序列得到的(注意s本身没有发生变化)。
(7) public string group():返回一个string对象该对象的字符序列是find方法在s的字符序列中找到的匹配regex的子字符序列。

具体示例:

到此这篇关于java中字符序列的替换与分解的几种实现方法的文章就介绍到这了,更多相关java中字符序列替换与分解内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

相关标签: Java 字符序列