Java实验项目三——递归实现字符串查找和替换操作
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实验项目三——递归实现字符串查找和替换操作的更多相关文章
- Java实验项目三——职工类对象数组按照职工生日排序
Program: 修改项目三(1)中的第3题,实现比较方法,将对象数组的数据按照生日的大小给职工排序. Description:令日期类MyDate和员工类Worker类实现接口Comparable, ...
- Java实验项目三——宠物商店
Program:宠物商店的设计(继承,接口,线性线性表) Description:本题未实现图形用户界面,项目结构描述如下: classes.Pet:定义宠物接口,只要实现该接口的宠物类,都可存储进宠 ...
- Java实验项目三——平面图形和立体图形抽象类
Program:按照下面要求完成类的设计 (1)设计一个平面图形抽象类和一个立体图形抽象类,提供该类对象公共的方法和属性. (2)修改项目三中第2题中所设计的球类.圆柱类,圆锥类.矩形类.三角形类.圆 ...
- Java实验项目三——简单工厂模式
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...
- Java实验项目三——编程实现Person类,学生类的设计及其继承关系
Program: 编程实现Person类,学生类的设计及其继承关系 代码如下: 定义抽象类Person 1 /* 2 * Description:建立抽象类 3 * 4 * Written By:Ca ...
- Java实验项目三——采用面向对象的方式设计线性表
Program: 采用面向对象的方法设计一个线性表,目的是为其他需要用线性表的应用提供线性表对象. 1.list包中,定义线性表类 1 /* 2 * Description:定义线性表类 3 * 4 ...
- Java实验项目三——面向对象定义职工类和日期类
Program:按照如下要求设计类: (1)设计一个日期类,用于记录年.月.日,并提供对日期处理的常用方法. (2)设计一个职工类,该职工类至少具有下面的属性:职工号,姓名,性别,生日,工作部门,参加 ...
- 20135231 JAVA实验报告三:敏捷开发与XP实践
---恢复内容开始--- JAVA实验报告三:敏捷开发与XP实践 20135231 何佳 实验内容 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习 ...
- Java初学者笔记三:关于字符串和自实现数组常见操作以及异常处理
一.字符串常见的操作 1.结合我在python中对于字符串常见处理总结出下面三个应该能算是字符串造作的TOP 3 //字符串查找子串,存在返回index,不存在返回-1 等于python的find: ...
随机推荐
- 什么是FOC
https://zhidao.baidu.com/question/354536332.html FOC简述 磁场定向控制系统(FOC)又称为矢量控制系统,他是选择电机某一旋转磁场轴作为特定的同步旋转 ...
- JQuery.Gantt开发指南(转)
说明 日前需要用到甘特图,以下转载内容源自网络. • 概述 1.JQuery.Gantt是一个开源的基于JQuery库的用于实现甘特图效果的可扩展功能的JS组件库. •前端页面 o 资源引用 首先我们 ...
- docker中ubuntu源更新慢加速 换为国内源 Debian10源
本来以为是Ubuntu打包的镜像,换了阿里源老是报错100公钥不可用,结果发现是Debian的操作系统,换位Debian的操作系统打包的,换位Debian的源即可 #源如果使用错误也会报错,没有Deb ...
- .NET Core中插件式开发实现
前言: 之前在文章- AppDomain实现[插件式]开发 中介绍了在 .NET Framework 中,通过AppDomain实现动态加载和卸载程序集的效果. 但是.NET Core 仅支持单个默认 ...
- Python函数装饰器高级用法
在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...
- VMware vRealize Suite 8.4 发布 - 多云环境的云计算管理解决方案
VMware vRealize Suite 8.4.0, Release Date: 2021-04-15 概述 VMware vRealize Suite 是一种多云环境的云计算管理解决方案,为 I ...
- Linux下使用LVM管理(扩展/缩小/删除)
LVM的工作原理 LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件 ...
- GO语言复合类型02---数组
package main import "fmt" /* 固定长度.固定类型的数据容器 */ /*数组的声明*/ func main031() { //var array [5]i ...
- 201871030132-熊文婷 实验二 个人项目―《D{0-1}KP问题》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
- 十四、.net core(.NET 6)搭建ElasticSearch(ES)系列之给ElasticSearch添加SQL插件和浏览器插件
给ES添加SQL插件的方法: 下载SQL插件地址:https://github.com/NLPchina/elasticsearch-sql 当前最新的是7.12版本,我的ES是7.13版本,暂且将 ...