广告
返回顶部
首页 > 资讯 > 精选 >Java中如何实现字符序列的替换与分解
  • 348
分享到

Java中如何实现字符序列的替换与分解

2023-06-29 06:06:28 348人浏览 安东尼
摘要

这篇“Java中如何实现字符序列的替换与分解”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中如何实现字符序列的替换与

这篇“Java中如何实现字符序列的替换与分解”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中如何实现字符序列的替换与分解”文章吧。

一、使用String类

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

例如:

String s1="123hello456";String s2=s1.replaceAll("\\d+","你好。"); //"\\d+"是正则表达式,表示一个或多个0~9之间的任意数字System.out.println(s1);//打印结果为: 123hello456    没有被改变System.out.println(s2);//打印结果为: 你好。hello你好。

再如:

String regex="-?[0-9][0-9]*[.]?[0-9]*";String s1="999大家好,-123.459804明天放假了";String s2=s1.replaceAll(regex,"");System.out.println("剔除"+s1+"中的数字后得到的字符序列是:"+s2);//剔除999大家好,-123.459804明天放假了中的数字后得到的字符序列是: 大家好, 明天放假了

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

public String[] split(String regex)

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

例如:

//需求:对于一个字符序列,要分解出全部由数字字符组成的单词。String s1="1931年9月18日晚,日本发动侵华战争,请记住这个日子!";String regex="\\D+";String s2[]=s1.split(regex);for(String s:s2)System.out.println(s);//分别输出1931  09  08 ,且可知s2.length()=3;

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

String s1="公元2022年02月18日";String regex="\\D+";String s2[]=s1.split(regex);System.out.println(s2.length());//会编译报错:Method call expected for(String s:s2)System.out.println(s);//s2[0]=  s2[1]=2022 s2[2]=02  s2[3]=18  s1[0]是空的字符串,什么也不会显示。//所以s2数组长度应该为4而不是3,多出来的空字符串是"公元"左侧被默认有一个单词。内容为空。

二、使用StringTokenizer类

和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:

String s="we are stud,ents";StringTokenizer fenxi=new StringTokenizer(s," ,");//用空格和逗号的任意组合作为分隔标记int number=fenxi.countToken();while(fenxi.hasMoreTokens()){String str=fenxi.nextToken();System.out.println(str);System.out.println("还剩"+fenxi.countToken()+"个单词");}System.out.println("s共有单词:"+number+"个");//输出结果:we还剩3个单词are还剩2个单词stud还剩1个单词ents还剩0个单词s共有单词:4个

具体示例2:

String s="市话费:28.39元,长途话费:49.15元,上网费:352元";String delim="[^0-9.]+";//非数字和.序列都匹配delims=s.replaceAll(delim,"#");StringTokenizer fenxi=new StringTokenizer(s,"#");double totalMoney=0;while(fenxi.hasMoreTokens()){double money=Double.parseDouble(fenxi.nextToken());System.out.println(money);totalMoney+=money;}System.out.println("总费用:"+totalMoney+"元");//输出结果:28.3949.15352.0总费用:429.53999999999996元

三、使用Scanner类

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

String s="telephone cost 876 dollar.Computer cost 2398.89 dollar.";

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

Scanner scanner=new Scanner(s);

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

useDelimiter(正则表达式);

将正则表达式作为分隔标记,即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()方法返回该非数字化单词。

具体示例:

String cost="市话费:28.39元,长途话费:49.15元,上网费:352元";Scanner scanner=new Scanner(cost);scanner.useDelimiter("[^0-9.]+");double sum=0;while(scanner.hasNext()){try{    double price=scanner.nextDouble();    sum+=price;    System.out.println(price);    }catch(InputMismatchException e){    String s=scanner.next();    }}System.out.println("总费用:"+sum+"元");//输出结果:28.3949.15352.0总费用:429.53999999999996元

对比:

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

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

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

四、使用Pattern类与Matcher类

使用Pattern类与Matcher类的步骤如下:

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

String regex="-?[0-9][0-9]*[.]?[0-9]*";Pattern pattern=Pattern.compile(regex);

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

Matcher matcher=pattern.matcher(s);

这两个步骤结束后,匹配对象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的子字符序列。

具体示例:

String regex="-?[0-9][0-9]*[.]?[0-9]*";//匹配数字,整数或浮点数的正则表达式Pattern pattern=Pattern.compile(regex);//初始化模式对象String s="市话费:28.39元,长途话费:49.15元,上网费:352元";Matcher matcher=pattern.matcher(s);//初始化匹配对象,用于检索sdouble sum=0;while(matcher.find()){String str=matcher.group();sum+=Double.parseDouble(str);System.out.println("从"+matcher.start()+"到"+matcher.end()+"匹配的子序列:");System.out.println(str);}System.out.println("总费用:"+sum+"元");String weatherForecast[]={"北京:-9度至7度","广州:10度至21度","哈尔滨:-29度至-7度"};//存放三地的温度double averTemperture[]=new double[weatherForecast.length];//存放三地的平均温度for(int i=0;i<weatherForecast.length;i++){Matcher matcher1=pattern.matcher(weatherForecast[i]);//初始化匹配对象,模式不变double sum1=0;int count=0;while(matcher1.find()){count++;//一个地方有几个气温,count就加几次sum1+=Double.parseDouble(matcher1.group()); //sum1表示的是一个地方最高气温与最低气温的和}averTemperture[i]=sum1/count;//for循环一次,算出一个地方的平均气温}System.out.println("三地的平均气温:"+Arrays.toString(averTemperture));//输出结果为:从4到9匹配的子序列:28.39从16到21匹配的子序列:49.15从27到30匹配的子序列:352总费用:429.53999999999996元三地的平均气温:[-1.0, 15.5, -18.0]

以上就是关于“Java中如何实现字符序列的替换与分解”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Java中如何实现字符序列的替换与分解

本文链接: https://www.lsjlt.com/news/322995.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中如何实现字符序列的替换与分解
    这篇“Java中如何实现字符序列的替换与分解”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中如何实现字符序列的替换与...
    99+
    2023-06-29
  • Java中字符序列的替换与分解的几种实现方法
    目录一、使用String类二、使用StringTokenizer类三、使用Scanner类四、使用Pattern类与Matcher类一、使用String类 String对象调用pub...
    99+
    2022-11-13
  • javascript中如何实现字符串替换星号
    这篇文章给大家分享的是有关javascript中如何实现字符串替换星号的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 javascript实现字符串替...
    99+
    2022-10-19
  • 批处理BAT如何实现替换与截取字符串
    这篇文章将为大家详细讲解有关批处理BAT如何实现替换与截取字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、替换用法 例 代码如下:@echo off set a=belcome to CMD bo...
    99+
    2023-06-08
  • Java如何实现替换PDF中的字体功能
    这篇文章给大家分享的是有关Java如何实现替换PDF中的字体功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。引入jarMaven程序中配置pom.xml:<repositories> &n...
    99+
    2023-06-29
  • JAVA正则表达式及字符串的替换与分解相关知识总结
    JAVA正则表达式及字符串的替换与分解 Java 提供了 java.util.regex 包来与正则表达式进行模式匹配 java.util.regex 包主要包括以下三个类: Pat...
    99+
    2022-11-12
  • JavaScript基于扩展String如何实现替换字符串中index处字符
    小编给大家分享一下JavaScript基于扩展String如何实现替换字符串中index处字符,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去...
    99+
    2022-10-19
  • 如何分析Java字符串的比较,查找及替换等操作
    如何分析Java字符串的比较,查找及替换等操作,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在Java当中,为字符串类提供了丰富的操作方法,对于字符串,我们常见的操作就是:...
    99+
    2023-06-26
  • 如何实现替换一个字段的所有非数字字符为空
    这篇文章主要介绍“如何实现替换一个字段的所有非数字字符为空”,在日常操作中,相信很多人在如何实现替换一个字段的所有非数字字符为空问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-18
  • 如何在Java中实现序列化与反序列化
    本篇文章给大家分享的是有关如何在Java中实现序列化与反序列化,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. A...
    99+
    2023-06-14
  • java 实现Unicode与普通字符(包括中文)的转换
        今天使用zl464发送tts语音播报,文档上面明确要求中文编码是UTF-8,但是我发过去的中文,它全都不认识,最后实验出来需要将字符串转成Unicode它就认识了,下面记录了java中文转Unicode的方法。 Java实现Unic...
    99+
    2023-09-10
    java 开发语言 java工具类
  • 序列化与反序列化如何在java项目中实现
    序列化与反序列化如何在java项目中实现 ?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 1.Java序列化与反序列化 Java序列化是指把...
    99+
    2023-05-31
    java 序列化 反序列化
  • 如何使用java实现字符串中的字母排序
    这篇文章主要介绍了如何使用java实现字符串中的字母排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用java实现字符串中的字母排序文章都会有所收获,下面我们一起来看看吧。题目要求java实现字符串中的...
    99+
    2023-07-06
  • Java中如何实现String字符串分割
    今天小编给大家分享的是Java中如何实现String字符串分割,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。Java中实现String字符串分割的3种方法方法1:split(stri...
    99+
    2023-08-03
  • Java正则表达式中如何实现分组和替换
    小编给大家分享一下Java正则表达式中如何实现分组和替换,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!正则表达式的子表达式(分组)不是很好懂,但却是很强大的文本处理工具。1 正则表达式热身匹配电话号码// 电话号...
    99+
    2023-06-21
  • PHP如何实现二维数组中行和列的替换操作
    PHP中使用二维数组十分常见,不过在进行一些操作时可能需要对二维数组的行或列进行替换。本文将介绍在PHP中如何实现二维数组的行和列的替换操作。一、PHP二维数组二维数组是由多个一维数组组成的数组,可以想象成是一个表格。在PHP中可以使用ar...
    99+
    2023-05-14
  • 在java项目中如何实现将字符串转换为整数
    这篇文章给大家介绍在java项目中如何实现将字符串转换为整数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java中字符串转整数       该题虽然和我们正...
    99+
    2023-05-31
    java 字符串 整数
  • 详解Java如何实现在PDF中插入,替换或删除图像
    目录前言将图像插入PDF文档完整代码效果图替换PDF文档中的图像完整代码效果图删除PDF文档中的指定图像完整代码效果图前言 图文并茂的内容往往让人看起来更加舒服,如果只是文字内容的累...
    99+
    2023-01-11
    Java PDF插入 替换 删除图像 Java PDF插入图像 Java PDF替换图像 Java PDF删除图像
  • 如何解决Java中HashMap与String字符串互转的问题
    小编给大家分享一下如何解决Java中HashMap与String字符串互转的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!背景:当我们有需求将HashMap转为Json格式的String时,切记不要使用HashMap的...
    99+
    2023-06-29
  • 利用Java如何实现替换int数组中的重复数据
    本篇文章为大家展示了利用Java如何实现替换int数组中的重复数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。具体如下:package test;import java.util.HashSet;...
    99+
    2023-05-31
    java 数组 ava
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作