vue视频教程 底层架构 C语言 extjs6.5 php dataframe vb6 odbc it教学视频 easyui视频 java商城源码 jquery触发change事件 mysql数据库驱动 python转java Navicat python数字类型 java的正则表达式 java在线课程 java基础课程 java自学编程入门教程 java创建集合 java定义变量 java判断文件是否存在 java集合图 java连接数据库代码 javaspring linuxgrep linux的find php语言入门 磁盘分区软件 js四舍五入 按钮制作 java电子书下载 Ext2Fsd din字体下载 linux定时任务 苹果放大镜 算法笔记 ps扭曲变形 jsp源码下载
当前位置: 首页 > 学习教程  > 编程语言

查找一个字符串中相同字符串的个数

2020/7/24 10:19:42 文章标签:

查找一个字符串中相同字符串或字符的个数

  • 在此只例举后面三种方法,遍历方法弃用
    • 1. IndexOf()
    • 2. Count()--------- 查找单个字符
    • 3. 通用最高效方法

有四种思路,消耗内存和时间递增:
1.遍历(弃用,使用 substring ,每次截取当前字符串的后面字符串,然后使用 Contains 查看后面字符串还有没有匹配项,如果还有,那么截取后面的字符串),这一步很花时间,因为每次都要截取字符串,等于需要遍历,如果数量 >10W 的时候,毋庸置疑会比较卡顿,但是处理小文件也可以,只是大文件十分不推荐。
2. IndexOf(),如果 整个字符串.IndexOf (String value , int startIndex)!= -1,那么有匹配项,再次startIndex+1后再次查找即可。这一步省去了每一次都要截取一定长度的字符串的时间。
3. Count(),但是要注意Count()方法需要的是 IEnumerable< char > 类型的参数,可以使用 lambda表达式,但是这个方法有局限性,只能查找单个字符,如果你想查找的是一个字符串,这个方法不管用。
4.将当前需要查找的这个字符串在整个字符串中全部替换成空字符,然后用删除之前的字符串的长度减去现在剩余字符串的长度,差额 / 单位长度,用到的函数是Replace(),消耗内存量和时间都最短,字符串和字符都能够通用。

在此只例举后面三种方法,遍历方法弃用

1. IndexOf()

//相同字符串的个数
int countNum;
//相同字符串的位置List
List<int> breakIndex;

private void CalculateNum(string father, string son)
{
	countNum = 0;
	breakIndex = new List<string>();
	int index = father.IndexOf(son);
	while(index!=-1)
	{
		countNum++;
		breakIndex.Add(index);
		//这里 Index+1 是为了检索下一个的时候,位置需要向后挪1个字符,而不是挪 son.length 长度
		index += index;
		index = father.IndexOf(son,index);
	}
}
//打印个数
Console.WriteLine(countNum);

2. Count()--------- 查找单个字符

//整个字符串
string father;
//需要查找的字符串
string son;
private void CountNum()
{
	//这里查找的单个字符是换行符,Count 方法中用 lambda 表达式
	int number = father.Count(i => i == '\n');
	//打印个数
	Console.WriteLine(number);
}

3. 通用最高效方法

//整个字符串
string father;
//需要查找的字符串
string son;
private int CountNumber()
{
	     //判断是否有相同字符串
         if (father.Contains(son))
         {
          	//用一个字符串储存被替换后的整个字符串
          	string strReplaced = father.Replace(son, "");
        	//两个字符串的长度差值 / 被替换掉的字符串单位长度
          	return (father.Length - strReplaced.Length) / son.Length;
          }
          //没有返回0个
          return 0;
}
void Main()
{
		//存储相同的个数
		int countNum = CountNumber();
		//打印个数
		Console.WriteLine(countNum);
}

本文链接: http://www.dtmao.cc/news_show_50240.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?