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: ...
随机推荐
- linux 创建网桥
由于最近项目需验证个问题,需求是要创建一个虚拟机网桥,在使用ifconfig命令查看时让docker0网桥不在第一个显示,因此,我们创建一个虚拟网桥让它排在第一位置 项目使用Centos7系统,因此使 ...
- Linux 性能监控工具
- 启动dubbo消费端过程提示No provider available for the service的问题定位与解决
文/朱季谦 某次在启动dubbo消费端时,发现无法从zookeeper注册中心获取到所依赖的消费者API,启动日志一直出现这样的异常提示 Failed to check the status of t ...
- [Django高级之Auth模块]
[Django高级之Auth模块] auth模块 ←详情点击查看 1.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统 ...
- IDEA 最实用快捷键【MAC版本】
目录 option + F7 Ctrl + B / Ctrl +鼠标左键(一键两用,可以无限循环的跳过来跳过去,我跳过去了,我又跳回去了) command + E (这个快捷键很有用,为什么我老是用不 ...
- RedisPool
class RedisPool(object): instance = None def __init__(self, host='192.168.2.129', port=7000, passwor ...
- Elasticsearch分页查询
global index global CLIENT index = "guajibao-ipused-2019.10.13" CLIENT = Elasticsearch(hos ...
- redis主从架构宕机问题手动解决
1 主机宕机 1. 设置端口6379是主机,端口6380是从机,全部都正常启动 2. 验证在6379写入数据,在6380也能得到数据 3. 现在将6379主机停掉,模拟主机宕机 4. 由 ...
- TensorFlow中的语义分割套件
TensorFlow中的语义分割套件 描述 该存储库用作语义细分套件.目标是轻松实现,训练和测试新的语义细分模型!完成以下内容: 训练和测试方式 资料扩充 几种最先进的模型.轻松随插即用 能够使用任何 ...
- ffmpeg architecture(下)
ffmpeg architecture(下) 第3章-转码 TLDR:给我看代码和执行. $ make run_transcoding 我们将跳过一些细节,但是请放心:源代码可在github上找到. ...