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. 微服务系列(二)GRPC的介绍与安装

    微服务系列(二)GRPC的介绍与安装 1.GPRC简介 GRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架.GRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多 ...

  2. SQL Server 将两行或者多行拼接成一行数据

    一个朋友,碰到一个问题. 就是查询出来的结果集,需要每隔三行.就将这三行数据以此拼接为一行显示.起初我想着用ROW_NUMBER加CASE WHEN去做,发现结果并非我预期那样. 结果如下: 由于别人 ...

  3. 将代码生成器带入TVM

    将代码生成器带入TVM 为了使数据科学家不必担心开发新模型时的性能,硬件后端提供程序(例如Intel,NVIDIA,ARM等)可以提供诸如cuBLAS或cuDNN之类的内核库以及许多常用的深度学习内核 ...

  4. TensorFlow创建DeepDream网络

    TensorFlow创建DeepDream网络 Google 于 2014 年在 ImageNet 大型视觉识别竞赛(ILSVRC)训练了一个神经网络,并于 2015 年 7 月开放源代码. 该网络学 ...

  5. CVPR2020:扩展架构以实现高效的视频识别(X3D)

    CVPR2020:扩展架构以实现高效的视频识别(X3D) X3D: Expanding Architectures for Efficient Video Recognition 论文地址: http ...

  6. 开发平台支持Arm Cortex-M的微控制器上人工智能训练

    开发平台支持Arm Cortex-M的微控制器上人工智能训练 Development platform enables AI training on Arm Cortex-M-based microc ...

  7. Docker基本概念介绍

    前言 Docker和Kubernetes是我最近在学习的内容,本来是去年的目标,由于工作比较忙,没有时间去学习,今年剩下的半年时间我会好好系统学习下相关的内容,最后在学习下Devops相关理念,希望最 ...

  8. Redis系列(二):常用操作

    一.数据类型 如果学过数据结构就会知道,操作往往是在特定的数据结构上的,不同的数据结构就会有不同的操作,Redis支持以下的数据类型: 字符串(Strings),列表(Lists),集合(Sets), ...

  9. 二、特殊DNS解析

    一.DNS轮询 1.为站点 www.tedu.cn 提供DNS轮询解析,三台Web服务器节点的IP地址分别为: 192.168.4.10.192.168.4.20.192.168,4.30 步骤: 虚 ...

  10. GlusterFS更换Brick

    故障环境还原 GlusterFS集群系统一共有4个节点,集群信息如下 # 分别在各个节点上配置hosts.同步好系统时间,关闭防火墙和selinux [root@glusterfs-master-8 ...