`
meiyoudao
  • 浏览: 89702 次
  • 性别: Icon_minigender_1
  • 来自: 冲脉
社区版块
存档分类
最新评论

JAVA两个字符串比较匹配字数

阅读更多
//在一个字符串中匹配的另一个字符串中的字数.
//使用了三种匹配方法比较
public class RangeDifferencerOK {
	/**
	 * 
	 * 〈查询匹配模板的字符数〉 〈传入一个模板字符串,一个需要比较的字符串,获取匹配模板的字符字数返回.〉
	 * 
	 * @param model
	 * @param input
	 * @return int 如果有违例,请使用@exception/throws [违例类型]
	 *         [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该
	 * @see [类、类#方法、类#成员]
	 */
	public int Comparator(String model, String input) {

		char[] modelByte = model.toCharArray();
		char[] inputByte = input.toCharArray();
		// 当前模板索引值
		int j = 0;
		int right = 0;
//		StringBuffer sb = new StringBuffer();
//		StringBuffer sb2 = new StringBuffer();
//		StringBuffer sb3 = new StringBuffer();
		for (int i = 0; i < modelByte.length; i++) {

			int indexNum = ComparatorStr(modelByte[i], inputByte, j);
			// System.out.println("现在比较:"+(char)modelByte[i]+"结果:"+indexNum);
			// 传入的值在模板中索引得到
			if (indexNum >= 0) {
				// 搜索出的索引值
				j = indexNum + 1;
				// 正确值+1
				right++;
//				sb.append((char) modelByte[i]);
//				sb2.append(indexNum + ",");
//				sb3.append(j + ",");
				// 传入的值在模板中没有索引得到
			}
		}
//
//		System.out.println("正确字数:" + right);
//		System.out.println("匹配内容:" + sb);
//		System.out.println("模型内容:" + model);
//		System.out.println("对比内容:" + input);
//		System.out.println("模型内容下标:" + sb2);
//		System.out.println("对比内容下标:" + sb3);
		return right;
	}
	
	
	/**
	 * 
	 * 〈查询匹配模板的字符数〉 〈传入一个模板字符串,一个需要比较的字符串,获取匹配模板的字符字数返回.〉
	 * 
	 * @param model
	 * @param input
	 * @return int 如果有违例,请使用@exception/throws [违例类型]
	 *         [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该
	 * @see [类、类#方法、类#成员]
	 */
	public int Comparator2(String model, String input) {

		char[] modelByte = model.toCharArray();
		char[] inputByte = input.toCharArray();
		int right = 0;
		int modelIi = 0;
		int inputJj = 0;
		for (int i = 0,j=0; i < modelByte.length && j < inputByte.length; i++,j++) {

			if (modelByte[i] == inputByte[j]) {
				right++;
			}else{
				for(int ti =i; ti<modelByte.length; ti++){
					if(modelByte[ti] == inputByte[j]){
						modelIi = ti;
						break;
					}else if(modelByte.length == ti+1){
						i--;
					}
					
				}
				for(int tj =j; tj<inputByte.length; tj++){
					if(inputByte[tj] == modelByte[i]){
						inputJj = tj;
						break;
					}else if(inputByte.length == tj+1){
						inputJj = inputByte.length;
					}
				}
				if(modelIi >= inputJj){
				
						right++;
						j = inputJj;
						
				}else if((modelIi-i) >= (inputJj-j)) {
					right++;
					j = inputJj;
					
				}
			}
			
			
		}
		return right;
	}

	/**
	 * 
	 * 〈查询匹配模板的字符数〉 〈传入一个模板字符串,一个需要比较的字符串,获取匹配模板的字符字数返回.〉
	 * 
	 * @param model
	 * @param input
	 * @return int 如果有违例,请使用@exception/throws [违例类型]
	 *         [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该
	 * @see [类、类#方法、类#成员]
	 */
	public int Comparator3(String model, String input) {

		char[] modelByte = model.toCharArray();
		char[] inputByte = input.toCharArray();
			int indexNumRe = 0;
		// 当前模板索引值
		int j = 0;
		int right = 0;
//		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < modelByte.length; i++) {

			int indexNum = ComparatorStr(modelByte[i], inputByte, j);
			
			//如果不是最后一个字
				if(i<modelByte.length-1 && indexNum < 0){
				int indexNum2 = ComparatorStr(modelByte[i+1], inputByte, j);
				if (indexNum < indexNum2) {
					// 搜索出的索引值
					j = indexNum + 1;
						indexNumRe = indexNum;
					// 正确值+1
					right++;
//					sb.append((char) modelByte[i]);
					}else if(indexNum == -1 && indexNum2 == -1){
						indexNum = indexNumRe;
						j = indexNum + 1;
					}
				}else{
					if (indexNum >= 0) {
						j = indexNum + 1;
						indexNumRe = indexNum;
					// 正确值+1
					right++;
//					sb.append((char) modelByte[i]);
				}
			}
		}
		return right;
	}
	
	// 传一个byte型数据在模型中查找是否存在,并返回索引值
	public int ComparatorStr(char model, char[] input, int mindex) {
		// String model="013356";

		for (int i = mindex; i < input.length; i++) {
			if (model == input[i]) {
				return i;
			}
		}
		return -1;
	}



	/**
	 * 
	 * 〈计算字数〉
	 * 〈传入一个字符串,包括标点符号,返回一个剔除了标点符号的字数.字符串类型〉
	 * @param source
	 * @return String
	 * 如果有违例,请使用@exception/throws [违例类型]   [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该 
	 * @see          [类、类#方法、类#成员]
	 */
	public int coutWord(String source){
		
		//各种标点符号
		String reg2="[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+\\`\\-\\=\\~\\!\\@\\#\\$\\" +
		"%\\^\\&\\*\\\\(\\)\\_\\+\\=\\-\\`\\[\\]\\\\'\\;\\/\\.\\,\\<\\>\\?\\:" +
		"\"\\{\\}\\|\\,\\.\\/\\;\\'\\[\\]\\\\\<\\>\\?\\:\\"\\{\\}\\|\\“\\”\\" +
		"‘\\’\\。\\r+\\n+\\t+\\s\\]";
		
		//剔除标点符号
		source = source.replaceAll(reg2, "");

		return source.getBytes().length;
	}
	
	
	/**
	 * 
	 * 〈剔除符号〉
	 * 〈传入一个字符串,包括标点符号,返回一个剔除了标点符号的字符串〉
	 * @param source
	 * @return String
	 * 如果有违例,请使用@exception/throws [违例类型]   [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该 
	 * @see          [类、类#方法、类#成员]
	 */
	public String RemovedSymbols(String source){
		
		//各种标点符号
		String reg2="[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+\\`\\-\\=\\~\\!\\@\\#\\$\\" +
		"%\\^\\&\\*\\\\(\\)\\_\\+\\=\\-\\`\\[\\]\\\\'\\;\\/\\.\\,\\<\\>\\?\\:" +
		"\"\\{\\}\\|\\,\\.\\/\\;\\'\\[\\]\\\\\<\\>\\?\\:\\"\\{\\}\\|\\“\\”\\" +
		"‘\\’\\。\\r+\\n+\\t+\\s\\]";
		
		//剔除标点符号
		source = source.replaceAll(reg2, "");

		return source;
	}

/**
 * 
 * 〈查询所有符合的字符〉
 * 〈查询所有符合的字符〉
 * @param input
 * @param model
 * @return String
 * 如果有违例,请使用@exception/throws [违例类型]   [违例说明:异常的注释必须说明该异常的含义及什么条件下抛出该 
 * @see          [类、类#方法、类#成员]
 */
	public String getTempModel(String input,String model){
		StringBuffer returnStr = new StringBuffer();
		
		//判断模型字符串是否为空
		if(model!=null){
			
			//模板中的当前字符串
			char[] modelChs = model.toCharArray();
			
			String cm = null;
			boolean sign = false;
			for (int i = 1; i < modelChs.length; i++) {
				//获取模板两个字
				cm = String.valueOf(modelChs[i-1])+String.valueOf(modelChs[i]);
				
				//如果在input字符串中找到该词组
				if(input.indexOf(cm)!=-1){
					
					if(!sign){
						returnStr.append(String.valueOf(modelChs[i-1]));
					}
					else{
						returnStr.append(String.valueOf(modelChs[i-1]));
					}
					sign = true;
					//是否已到模板末尾字符
					if(i==modelChs.length-1){
						returnStr.append(String.valueOf(modelChs[i]));
					}
				}else{
					if(sign){
						
						returnStr.append(String.valueOf(modelChs[i-1]));
						sign=false;
					}
				}
			}
		}
		
		return returnStr.toString();
	}
	
		
	public static void main(String[] args) {
		RangeDifferencerOK r = new RangeDifferencerOK();
		String input= "浙江公司信息化论坛合作伙伴联盟人民大会堂举行省通信管理局和省公司会上秘书长代表省政府祝贺对论坛和联盟响应总体战略推广移动信息技术和小康社会的全面建设肯定希望论坛联盟推动我省再上台阶总经理同时指出浙江公司领导下移动通信专家专家信息化建设提升信息";

		String model= "浙江公司信息化、论坛暨信息化合作伙伴联盟2010年年会在浙江省人民大会堂隆重举行。省政府办公厅孟刚副秘书长、省通信管理局敖大明局长、省经信委林华副巡视员和省公司钟天华总经理等领导出席年会。会上,孟刚副秘书长代表省政府致辞,他首先对信息化论坛和联盟年会的召开表示祝贺,对论坛和联盟响应省政府“创业富民、创新强省”的总体战略,以科技交流平台推广移动信息技术,促进我省经济转型升级和小康社会的全面建设所作出成绩表示肯定,并希望论坛、联盟能够在我省十二五规划下再接再厉,推动我省信息化发展再上台阶发挥更大作用。钟天华总经理对各位领导的到来表示感谢,同时指出中国移动浙江公司将在省委省政府的领导下,加速从移动通信专家向移动信息专家转型,以“数字浙江”建设为己任,大力推进信息化建设,提升信息服务业水平。";
		
		input= "绍兴客户类型无线座机发展采用手机座机捆绑模式无线家园现有实现家庭套餐座机无线座机客户发展累计系列融合针对目前集团竞争形势优势作用层面活动稳定集团形势针对捆绑以旧换新捆绑活动二次促销捆绑针对无线座机话务可乎推出通话活动获赠话费通话赚取话务量无线座机客户的无线座机客户";

		model= "绍兴分公司细分客户类型持续推进无线座机发展,一、采用“手机+座机”的融合捆绑模式,发展座机客户。推出E系统“无线家园”套餐,利用现有手机客户的规模优势,实现家庭套餐内的手机、座机无限畅打,带动家庭座机客户发展。目前已累计发展E系列融合套餐用户近2200余户。二、针对目前集团竞争形势,发挥无线座机移固替代优势作用,在集团层面开展无线座机团购活动,稳定集团竞争形势。三、针对捆绑到期的座机客户,推出预存送话费、座机以旧换新等系列后续捆绑活动,积极进行二次促销捆绑,以提高客户满意度和在网粘性。四、针对无线座机沉默或低话务客户,推出“通话赚话费”活动,客户年底前每月通话达到一定时间即可获赠5元话费,鼓励低活性用户通话赚取话费。通过激发话务量,提升无线座机客户的在网活性。";
		
		
		
//		input= "家分公司政府集团竞争公司领导高度重视分公司应对变化对总结分析竞争战略方向及时出台应对政策意见加大优惠力度当面全地区组织开展开展对于家政府集团结合竞争形式形式四整理应对走访脚本宣传集团会议布置客户经历操作组织人员人员加强集团签约签约统一大力开展同意支付目前签约累计累计下一家政府";
//
//		model= "嘉兴分公司积极行动应对政府类集团竞争,一、公司领导高度重视,组织各部门与分公司召开竞争应对讨论会与每日电视电话晨会,对前日形势进行总结与分析,把控竞争应对的总体战略方向。二、市场、政企部门及时梳理并出台应对政策与指导意见,通过开展个人捆绑签约并加大全业务优惠力度,从攻防两个方面指导全地区灵活开展应对。三、组织开展专题集团预警,对于全市1669家政府类集团,结合集团竞争形势与稳定度进行红黄灯日通报。四、整理下发竞争应对走访脚本与应对宣传口径,通过集团条线会议进行布置,规范一线客户经理操作,并组织人员到一线开展走访与支援。五、加强集团整体性签约,除推广集团话费统一支付活动外,还大力开展了集团保底签约活动,进一步稳定集团话费收入。截至目前,全市整体签约集团累计已达2000余家,政府类集团整体层面保持稳定。";
//		
		
//		input= "浙江公司信息化连,梦年任您大会堂腹胀局长和省公司总经理会上副秘书至此首先召开对联盟创生总体以推广vjishu促进和小康建设所作出并联盟再接再厉台阶更大作用对各类同事指出省政府加速向移动专家建设为己任大力提升水品";
//		model= "浙江公司信息化论坛暨信息化合作伙伴联盟2010年年会在浙江省人民大会堂隆重举行。省政府办公厅孟刚副秘书长、省通信管理局敖大明局长、省经信委林华副巡视员和省公司钟天华总经理等领导出席年会。会上,孟刚副秘书长代表省政府致辞,他首先对信息化论坛和联盟年会的召开表示祝贺,对论坛和联盟响应省政府“创业富民、创新强省”的总体战略,以科技交流平台推广移动信息技术,促进我省经济转型升级和小康社会的全面建设所作出成绩表示肯定,并希望论坛、联盟能够在我省十二五规划下再接再厉,推动我省信息化发展再上台阶发挥更大作用。钟天华总经理对各位领导的到来表示感谢,同时指出中国移动浙江公司将在省委省政府的领导下,加速从移动通信专家向移动信息专家转型,以“数字浙江”建设为己任,大力推进信息化建设,提升信息服务业水平。";
//		StringBuffer s1 = new StringBuffer();
//		s1.append("EJP(Extensible Java Profiler ) 开源的Java剖析工具,它使用一个可升级的,可扩展的体系结构.一个Java剖析工具是用来优化Java程序性能的开发工具,它帮助你找出并移除运行开销大的部分.EJP基于JVMPI(Java Virtual Machine Profiler Interface )可用来监控Java应用程序一小部分的执行情况并把它用一些突出的元素在分层的树上表示出来.");
//		StringBuffer s2 = new StringBuffer();
//		s2.append("EJP(Extensible Java Profiler ) 开源dgJava剖析工具,它使地方都是的,可扩展的体系结构.一个Java剖析工具是用来优化Java程序性能的开发工具,它帮助你找出并移除运行开销大的部分.EJP基于JVMPI(Java Virtual Machine Profiler Interface )可用来监控Java应用程序一小部分的执行情况并把它用一些突出的元素在分层的树上表示出来.");
		input = r.RemovedSymbols(input);
		model = r.RemovedSymbols(model);
		//System.out.println("输入字数:"+input.length());
		//System.out.println("模板字数:"+model.length());
		String newModel = r.getTempModel(input, model);
		String newInput = r.getTempModel(model, input);
//		System.out.println("新模板:"+newModel);
//		System.out.println("新内容:"+newInput);
		//System.out.println("新内容字数:"+newInput.length());
		//System.out.println("新模板字数:"+newModel.length());
		
		//System.out.println("旧最终匹配:"+r.Comparator(newModel, newInput));
		System.out.println("最终匹配:"+r.Comparator(newInput, newModel));
		System.out.println("最终匹配:"+r.Comparator2(newInput, newModel));
		System.out.println("最终匹配:"+r.Comparator3(newInput, newModel));
		System.out.println("新模板:"+newModel);
		System.out.println("新内容:"+newInput);
		//System.out.println("模板内容:"+model);
		//System.out.println("模板内容:"+model);
	

	}
}
0
0
分享到:
评论

相关推荐

    JAVA两个字符串比较匹配字数.docx

    在Java编程中,比较两个字符串的匹配字数是一项常见的任务,尤其是在文本处理或模式匹配的场景下。以下是一个简单的实现,通过`RangeDifferencer4Bak`类来完成这个功能。这个类有两个主要方法:`getTempModel`和`...

    两字符串比较返回重复个数

    两字符串比较返回重复个数,java的,课后一作业,随便写写

    总计字数,类似word统计

    在C#编程环境中,我们经常会遇到需要...总结起来,在C#中实现“字数统计”功能主要涉及正则表达式、字符串操作以及文件I/O。通过合理地组合这些技术,你可以构建出高效且灵活的字数统计工具,满足各种应用场景的需求。

    java统计汉字字数的方法示例

    在这个count方法中,首先定义了一个字符串变量Reg,它是一个正则表达式,专门用于匹配Unicode编码中的汉字范围。这里使用的正则表达式是“^[\u4e00-\u9fa5]{1}$”,它表示匹配任何一个编码在0x4e00到0x9fa5之间的...

    用Java编写的模拟 金山打字的应用程序

    这可能涉及到字符串比较、计时器和实时更新的正确率计算。 6. **速度统计**:金山打字训练通常会记录用户的打字速度,即字数/分钟。实现这一功能需要定时器和计算逻辑。 7. **多模式支持**:原版金山打字有英文和...

    编译原理词法分析实验报告java版.doc

    类中定义了一个字符串数组`KEY_WORD`,存储了编程语言中的关键字,例如"if"、"then"等。`isKeyWord`方法用于判断输入的字符串是否为关键字,通过遍历关键字数组进行比较。 `Element`类用于表示词法分析后的单个记号...

    正则表达式

    捷方式了,它还实施了一条规约,那就是一个字符串各个分离的部分包含的是完全相同的字符.例如:下面的正则表达式匹配的就是位于单引号或双引号之内的所有字 符.但是,它要求开始和结束的引号匹配(例如两个都是双引号...

    JavaSe总结

    `Comparator`接口定义了一个比较规则,可以用来比较两个对象。 ### 自定义比较规则 可以通过实现`Comparator`接口来自定义对象的比较逻辑。 ### Java中的包装类 Java为每种基本数据类型提供了对应的包装类,例如`...

    《javaScrip开发技术大全》源代码

    • sample25.htm 统计一个字符串在另一个字符串中出现的次数 • sample26.htm 使用正则表达式搜索子字符串 • sample27.htm 替换使用字符串查找到的子字符串 • sample28.htm 扩展...

    字数

    在Java中,我们可以通过`length()`方法来获取一个字符串的字符数。这个方法返回字符串中字符的数量,包括空格、标点符号等。例如: ```java String text = "这是个例子"; int charCount = text.length(); ...

    编译原理实验报告完整版

    程序通过比较字符数组(如`key[]`)与输入字符串来识别关键字。 **二、实验实现** 源代码中,`main()`函数负责读取输入直到遇到字符'#',并将输入存储在`prog[]`数组中。随后,程序遍历`prog[]`,对每个字符进行...

    双数组AC自动机精PPT学习教案.pptx

    双数组AC自动机是一种高效的字符串搜索算法,常用于文本处理和模式匹配问题。在这个PPT学习教案中,虽然没有直接提到AC自动机,但提到了B-树,这是数据库和文件系统中常用的自平衡查找树数据结构。下面将详细介绍B-...

    layui输入框只允许输入中文且判断长度的例子

    为了判断一个字符串是否只包含中文字符,并且长度是否符合要求,我们需要编写一个函数来实现这一逻辑。这个函数将会遍历输入字符串的每个字符,检查其Unicode编码范围来确定它是否为中文字符。对于中文字符,每个...

    2021-2022计算机二级等级考试试题及答案No.17244.docx

    - **字符串循环**:使用字符串作为循环结构时,循环的次数等于字符串的长度。 ### 9. 数据库系统的概念 - **DBS的概念**:DBS(Database System)指数据库系统,包括硬件、软件、数据库管理员和用户等元素,用于...

    2021-2022计算机二级等级考试试题及答案No.4125.docx

    - **解析**: 如果indexOf()方法未能找到指定的子字符串,则返回-1,表示未找到匹配项。 - **例题答案**: C (-1)。 #### 14. 打印机功能 - **知识点**: 打印机是一种输出设备。 - **解析**: 输出设备用于将计算机...

    2021-2022计算机二级等级考试试题及答案No.14667.docx

    - **题目描述**:将两个关系拼接成一个新的关系,生成的新关系中包含满足条件的元组,这种操作称为? - **选项分析**: - A. 选择 - B. 投影 - C. 连接 - D. 并 - **正确答案**:C - **知识点解析**:连接操作是...

    2021-2022计算机二级等级考试试题及答案No.3064.docx

    10. **main方法定义**:Java的main方法定义可以有多种形式,包括带字符串数组参数的括号,例如public static void main(String args[]),public static void main(String[] args),或public static void main(String...

    linux常用命令大全

    - `touch .classpath README` 创建两个文件 `.classpath` 和 `README`。 - `touch {test.txt,example.txt}` 同时创建 `test.txt` 和 `example.txt`。 #### 8. **echo** - **功能**: 在终端输出文字或字符串,并...

Global site tag (gtag.js) - Google Analytics