Java实现统计某字符串在另一个字符串中出现的次数
面试时会经常考这样的题目,估计也不让使用正则表达式。还好这个算法还算简单,不过在草稿纸上写难免会出现运行异常,好吧,面试官赢了,乃们屌丝就实实在在的把代码码出来吧。
谢谢“心扉”对我代码bug的纠正,现已想到更简便的方法,思路就是从被匹配字符串a中一个一个往后推,截取b字符串长度的字符串:
public class CountHit {
	public static void main(String[] args) {
		String a = "123456abcde6a6abc6ab";
		String b = "6abc";
		System.out.println(new CountHit().hit(a, b));
	}
	/**
	 *
	 * @param a
	 *            被匹配的长字符串
	 * @param b
	 *            匹配的短字符串
	 * @return 匹配次数
	 */
	public int hit(String a, String b) {
		if (a.length() < b.length()) {
			return 0;
		}
		char[] a_t = a.toCharArray();
		int count = 0;
		for (int i = 0; i < a.length() - b.length(); i++) {
			StringBuffer buffer = new StringBuffer();
			for (int j = 0; j < b.length(); j++) {
				buffer.append(a_t[i + j]);
			}
			if(buffer.toString().equals(b)){
				count ++;
			}
		}
		return count;
	}
}
下面这个算法有bug,临界点是部分匹配时会导致接下来后续真正能匹配的字符串被跳过一个字符,求高手纠正:
/**
* 统计某字符串在另一个字符串中出现的次数
*
*
*/
public class CountHit {
public static void main(String[] args) {
String a = "123456abcde6ab";
String b = "6abc";
System.out.println(new CountHit().hit(a, b));
} /**
*
* @param a
* 被匹配的长字符串
* @param b
* 匹配的短字符串
* @return 匹配次数
*/
public int hit(String a, String b) {
if (a.length() < b.length()) {
return 0;
}
char[] a_t = a.toCharArray();
char[] b_t = b.toCharArray();
int count = 0, temp = 0, j = 0; for (int i = 0; i < a_t.length; i++) {
// 保证一个连续的字符串 b 跟 a中某段相匹配
if (a_t[i] == b_t[j] && j < b_t.length) {
temp++;
j++;
// 此时连续的字符串 b 跟 已跟 a 中某段相匹配
if (temp == b_t.length) {
count++;
temp = 0;
j = 0;
}
}
// 只要有一个字符不匹配,temp计数从来
else {
temp = 0;
j = 0;
}
} return count;
}
}
Java实现统计某字符串在另一个字符串中出现的次数的更多相关文章
- Java 一个字符串在另外一个字符串出现次数
		
统计一个字符串在另外一个字符串出现次数 代码如下: package me.chunsheng.javatest; import java.util.regex.Matcher; import java ...
 - java中一个字符串是另外一个字符串的字串
		
java中一个字符串是另外一个字符串的字串 String类中有一个方法 public boolean contains(Sting s)就是用来判断当前字符串是否含有参数指定的字符串例s1=“take ...
 - C语言:利用指针解决:统计一个长度为2的字符串在另外一个字符串中出现的次数。
		
//统计一个长度为2的字符串在另外一个字符串中出现的次数. #include <conio.h> #include <stdio.h> #include <string. ...
 - MSSQL sqlserver 统计"一个字符串"在"另一个字符串"中出现的次数的方法
		
转自 http://www.maomao365.com/?p=9858 摘要: 下文讲述sqlserver中最快获取一个字符串在另一个字符串中出现个数的方法分享 实验环境:sql server 20 ...
 - oracle中一个字符串包含另一个字符串中的所有字符
		
oracle中一个字符串包含另一个字符串中的所有字符 --解决监理报告中所勾选的标段信息,与该用户所管理的标段字符串不匹配的问题. select * from a where instr(a,b)&g ...
 - php 判断字符串在另一个字符串中位置
		
$email='user@example.com'; //定义字符串$result=strstr($email,'@'); //返回子字符串echo $result; / ...
 - PHP:strpos()-返回字符串在另一个字符串中第一次出现的位置
		
strpos()函数返回字符串在另一个字符串中第一次出现的位置.如果没有找到该字符串,则返回false. 语法:strpos(sting, find [, start]) string ,必须,要搜索 ...
 - js中如何判断一个字符串包含另外一个字符串?
		
js中判断一个字符串包含另外一个字符串的方式比较多? 比如indexOf()方法,注意O是大写. var test="this is a test"; if(test.indexO ...
 - poj1056(字符串判断是否存在一个字符串是另一个字符串的前缀)
		
题目链接:https://vjudge.net/problem/POJ-1056 题意:给定一个字符串集,判断是否存在一个字符串是另一个字符串的前缀. 思路:和hdoj1671一样,有两种情况: 当前 ...
 
随机推荐
- Python 不定参数函数
			
1. 元组形式 def test1(*args): print('################test1################') print(type(args)) print(arg ...
 - JAVA 线程池基本总结
			
合理利用线程池能够带来三个好处. 第一:降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 第二:提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 第三:提高线程 ...
 - 科学计算三维可视化---TraitsUI(View定义界面)
			
View定义界面 使用View来自定义界面 class ModelManager(HasTraits): model_name = Str category = Str model_file = St ...
 - Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别
			
简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...
 - python操作mongo脚本
			
#!/usr/bin/python# -*- coding: utf-8 -*- import sysimport osimport jsonfrom pymongo import MongoClie ...
 - 打包python脚本为exe的坎坷经历, by pyinstaller方法
			
打包python脚本为exe的坎坷经历, by pyinstaller方法 又应验了那句歌词. 不经历风雨, 怎么见得了彩虹. 安装过程略去不提, 仅提示: pip install pyinstall ...
 - 另类之将ipython notebook嵌入blog方法
			
另类之将ipython notebook嵌入blog方法 ipynb文件很强大. 可是一直苦于没有找到好的方法把它直接嵌入到博文里. 现在得到一个另类的方法: 就是利用github集成了nbviewe ...
 - C#: Delegate and Event
			
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
 - ElasticSearch关键概念
			
Elasticsearch 添加索引 一个存储关联数据的地方 用来指向一个或者多个分片(shards)的逻辑命名空间(logical namespcase) 应用程序直接与索引通信 一个分片(shar ...
 - Android 5.0 最应该实现的8个期望
			
毫无疑问,Android 5 将是令人兴奋的操作系统,因为 Android4.0 至 4.4 版本之间并没有显著的差异,显然谷歌会在 5.0 版本中进行一些较大幅度的革新.那么,代号为“柠檬芝士蛋糕” ...