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一样,有两种情况: 当前 ...
随机推荐
- 利用Confluence搭建企业Wiki
Confluence安装与部署 下载安装包及破解包 安装包下载地址:https://www.atlassian.com/software/confluence/download-archives 破解 ...
- golang 性能测试pprof
golang 性能测试包是位于 net/http 包下的 pprof,其相关介绍可以参看具体的 官方文档 有关 golang 性能测试使用特别简单,在 main 包中的引包位置直接引入: import ...
- [网络流24题] 最长k可重区间集
https://www.luogu.org/problemnew/show/3358 以区间(1,5),(2,6),(7,8)为例 建模方法一: 建模方法二: 离散化区间端点 相当于找k条费用最大的不 ...
- 洛谷 P3382 【模板】三分法
https://www.luogu.org/problem/show?pid=3382 题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减. ...
- Mockserver -MOCO的使用
转自: http://blog.csdn.net/shensky711/article/details/52770686
- Elasticsearch技术解析与实战(三)文档的聚合
1.计算每个tag下的商品数量 PUT /database/_mapping/product { "properties": { "tags": { " ...
- python核心编程笔记——Chapter6
Chapter 6.序列:字符串,列表和元组 这章内容比较多啊,看得比较久,而且题目又难很多. 6.1鉴定一个字符串是否是另外一个字符串的字串,这道题目不是很确定,好像没有直接的判定吧. 直接是否内建 ...
- CSS实现DIV层背景透明而文字不透明
在我们设计制作一些网页的时候可能会用到半透明的效果,首先我们可能会想到用PNG图片处理,当然这是一个不错的办法,唯一的兼容性问题就是ie6 下的BUG,但这也不困难,加上一段js处理就行了.但假如我们 ...
- 如何定制Gtk版Emacs的Widget外观
当我们使用 xlib 版的Emacs时,可以通过 XResource 定义 Emacs 的菜单 栏.工具条.滚动条的外观. 现在,在Linux上我们大多使用 gtk版的Emacs,是否还有办法定义 E ...
- C# 定时执行方法: System.Timers.Timer用法示例
System.Timers.Timer t = new System.Timers.Timer(5000); //设置时间间隔为5秒 private void Form1_Load(ob ...