Program:按照下面要求实现字符串的操作:

    (1)设计一个提供下面字符串操作的类

      1)编写一个方法,查找在一个字符串中指定字符串出现的次数。

      2)编写一个方法,参数(母字符串,目标字符串,替换字符串)将母字符串中的所有目标字符用替换字符串替换。

      3)编写一个方法,判断一个email地址是否合法。

    (2)编写一个测试类,对(1)中的字符串类的方法逐一进行测试。

Description:前两个问题采用递归实现,最后一个问题,采用正则验证。代码如下:

 1 /*
2 * Description:采用递归实现字符串操作类
3 *
4 * */
5
6 package tools;
7
8
9 public class Operate {
10
11 //递归查找字符串中指定字符出现的次数
12 public static int searchEleNum(String str,String targetEle) { //参数为字符串和指定字符
13
14 if( str.indexOf(targetEle) == -1 ) {
15 return 0;
16 }else {
17 //从当前找到位置的下一个位置下标开始,截取字符串,再进行递归
18 return 1 + searchEleNum( str.substring( str.indexOf( targetEle ) + 1 ),targetEle);
19 }
20 }
21
22
23 //递归替换,将母字符串的目标字符串,替换成指定字符串
24 public static String replaceAll(String parent,String targetEle,String replaceEle ) {
25
26 //当目标元素不存在时,返回母字符串
27 if( parent.indexOf(targetEle) == -1 ) {
28
29 return parent;
30 }else { //目标元素存在时,采用截取的方式进行递归
31
32 //获取目标元素开始下标
33 int beginIndex = parent.indexOf(targetEle);
34 //获取目标元素结束位置的下一位置下标
35 int endIndex = beginIndex + targetEle.length();
36
37 //采用递归的方法,截取目标元素在parent中的前面字符串 + 替换字符串 + 目标元素在parent中的后面字符串递归
38 //注意:substring()方法,当有两个参数时,后者所表示下标元素取不到
39 return parent.substring(0,beginIndex) + replaceEle +
40 replaceAll(parent.substring(endIndex), targetEle, replaceEle);
41 }
42
43 }
44
45 //判断email地址是否合法
46 public static boolean ifEmeil(String email) {
47
48 //字符串不为空
49 if( email != null && !"".equals(email) ) {
50
51 //采用正则验证邮箱地址合法性
52 if( email.matches( "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$" ) ) {
53
54 return true;
55 }else {
56
57 return false;
58 }
59 }
60
61 return false;
62 }
63
64 }
 1 /*
2 * Description:字符串操作
3 *
4 * Written By:Cai
5 *
6 * Date Written:2017-09-25
7 *
8 * */
9
10 package main;
11
12 import tools.Operate;
13
14
15 public class DemoThree4 {
16
17 public static void main(String args[]) {
18
19 String str1 = "hello world"; //声明并初始化一个字符串变量
20
21 String email = "1234567789@qq.com"; //设置QQ邮箱地址,验证email合法性
22
23 //测试查找字符串出现次数的方法
24 System.out.println( str1 + "中,字符‘l’出现的次数为:" + Operate.searchEleNum(str1, "l") );
25 //测试替换指定字符的方法
26 System.out.println( str1 + "中,替换所有字符‘l’为字符6:" + Operate.replaceAll(str1, "l", "6") );
27
28 //验证email地址合法性
29 System.out.println( Operate.ifEmeil(email) );
30 System.out.println( Operate.ifEmeil(str1));
31
32 }
33
34 }

Java实验项目三——递归实现字符串查找和替换操作的更多相关文章

  1. Java实验项目三——职工类对象数组按照职工生日排序

    Program: 修改项目三(1)中的第3题,实现比较方法,将对象数组的数据按照生日的大小给职工排序. Description:令日期类MyDate和员工类Worker类实现接口Comparable, ...

  2. Java实验项目三——宠物商店

    Program:宠物商店的设计(继承,接口,线性线性表) Description:本题未实现图形用户界面,项目结构描述如下: classes.Pet:定义宠物接口,只要实现该接口的宠物类,都可存储进宠 ...

  3. Java实验项目三——平面图形和立体图形抽象类

    Program:按照下面要求完成类的设计 (1)设计一个平面图形抽象类和一个立体图形抽象类,提供该类对象公共的方法和属性. (2)修改项目三中第2题中所设计的球类.圆柱类,圆锥类.矩形类.三角形类.圆 ...

  4. Java实验项目三——简单工厂模式

    Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...

  5. Java实验项目三——编程实现Person类,学生类的设计及其继承关系

    Program: 编程实现Person类,学生类的设计及其继承关系 代码如下: 定义抽象类Person 1 /* 2 * Description:建立抽象类 3 * 4 * Written By:Ca ...

  6. Java实验项目三——采用面向对象的方式设计线性表

    Program: 采用面向对象的方法设计一个线性表,目的是为其他需要用线性表的应用提供线性表对象. 1.list包中,定义线性表类 1 /* 2 * Description:定义线性表类 3 * 4 ...

  7. Java实验项目三——面向对象定义职工类和日期类

    Program:按照如下要求设计类: (1)设计一个日期类,用于记录年.月.日,并提供对日期处理的常用方法. (2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加 ...

  8. 20135231 JAVA实验报告三:敏捷开发与XP实践

    ---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...

  9. Java初学者笔记三:关于字符串和自实现数组常见操作以及异常处理

    一.字符串常见的操作 1.结合我在python中对于字符串常见处理总结出下面三个应该能算是字符串造作的TOP 3 //字符串查找子串,存在返回index,不存在返回-1 等于python的find: ...

随机推荐

  1. teprunner测试平台定时任务这次终于稳了

    teprunner测试平台已经有一个多月没有更新了,主要原因是定时任务不够稳定,经过反复试错,找到了解决办法,这次终于稳定了. 本文开发内容 作为测试平台而言,定时任务算是必备要素了,只有跑起来的自动 ...

  2. 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.8 发布

    Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...

  3. 一:windows10开启虚拟化服务(也可用于部署docker提前准备)

    查看虚拟化已开启: 如果未启用,则需要添加虚拟化功能:控制面板 -> 启用或关闭Windows功能 选择Hyper-V的所有功能,确定: 系统会自动搜索并安装功能.安装完毕即可. 完结,撒花~~

  4. Win10 安装 Python3 (上)

    Python3 For Windows 10 installer 参考 The full installer 安装 随后可以看到,installer 在用户环境变量PATH中,添加了三项: 卸载 使用 ...

  5. Django settings 描述

    """ Django settings for log_collect_statistics project. Generated by 'django-admin st ...

  6. sql批量插入缓慢

    1.有一个普通的表t_asset,只有2个字段id,ip 没有索引 2.当用insert into t_asset(id,ip) values(?,?),(?,?) 1200多条记录时,发现竟然用了3 ...

  7. 微信内 H5 页面自定义分享

    起源: 最近公司在做一个活动的h5页面,在微信内打开时需要进行微信授权,然后后端会重定向到这个页面并且携带了一些参数(openid等).问题是点击微信的原生分享时,会把携带的这些参数一起分享出去,等于 ...

  8. NVIDIA A100 GPUs上硬件JPEG解码器和NVIDIA nvJPEG库

    NVIDIA A100 GPUs上硬件JPEG解码器和NVIDIA nvJPEG库 Leveraging the Hardware JPEG Decoder and NVIDIA nvJPEG Lib ...

  9. ADO.NET的五大对象

    ADO.NET是一种数据访问技术,使得应用程序可以连接到数据库存储,并以各种方式操作存储在其中的数据.该技术基于.NETFramework,与.NET Framework类库的其余部分高度集成. 其中 ...

  10. 理解 this

    this this 取什么值是在函数执行的时候确认的,不是在函数定义的时候确认的 this 的不同应用场景,this 的指向 函数在调用时,js 会默认给 this 绑定一个值,this 的值与绑定方 ...