字符串替换Replace仅替换第一个匹配项
C#里面的String.Replace(string,string)方法替换的时候是替换所有的匹配项,但是有时候我们会遇到这样的需求,就是只替换第一个匹配项。
我这里自己写另一个方法来实现这个功能,求大家指教:
public static string Replace(string source, string match, string replacement)
{
char[] sArr = source.ToCharArray();
char[] mArr = match.ToCharArray();
char[] rArr = replacement.ToCharArray();
int idx = IndexOf(sArr, mArr);
if (idx == -1)
{
return source;
}
else
{
return new string(sArr.Take(idx).Concat(rArr).Concat(sArr.Skip(idx + mArr.Length)).ToArray());
}
}
/// <summary>
/// 查找字符数组在另一个字符数组中匹配的位置
/// </summary>
/// <param name="source">源字符数组</param>
/// <param name="match">匹配字符数组</param>
/// <returns>匹配的位置,未找到匹配则返回-1</returns>
private static int IndexOf(char[] source, char[] match)
{
int idx = -1;
for (int i = 0; i < source.Length - match.Length; i++)
{
if (source[i] == match[0])
{
bool isMatch = true;
for (int j = 0; j < match.Length; j++)
{
if (source[i + j] != match[j])
{
isMatch = false;
break;
}
}
if (isMatch)
{
idx = i;
break;
}
}
}
return idx;
}
这里的第二个方法,我总觉得看了不爽,求更好的实现。
字符串替换Replace仅替换第一个匹配项的更多相关文章
- JS的replace默认只替换第一个匹配项
1. JS的replace默认只替换第一个匹配项. 解决方法: 使用正则表达式进行匹配替换[ ①.replace(new RegExp(②,"g") ,③); ] ①:包含 ...
- oracle学习笔记:字符串替换 replace、regexp_replace、translate函数
1.replace 函数 语法:replace(char, search_string, replacement_string) --针对字符串替换 功能: 将char中的字符串替换. 当re ...
- 浅谈JavaScript的字符串的replace方法
JavaScript字符串提供了一个replace方法.replace方法可以接受两个参数:第一个参数可以使RegExp对象或者一个字符串,第二个参数可以是一个字符串或者一个函数.如果第一个参数是字符 ...
- C#自定义字符串替换Replace方法
前一阵遇到一个如标题的算法题,是将原有字符串的某些片段替换成指定的新字符串片段,例如将源字符串:abcdeabcdfbcdefg中的cde替换成12345,得到结果字符串:ab12345abcdfb1 ...
- Python3字符串替换replace(),translate(),re.sub()
Python3的字符串替换,这里总结了三个函数,replace()和translate()和re.sub() replace() replace() 方法把字符串中的 old(旧字符串) 替换成 ne ...
- java字符串的替换replace、replaceAll、replaceFirst的区别详解
如果不是刚刚复习了下正则表达式,我可能也不会注意到,原来String的replaceAll跟replaceFirst用到了正则表达式! 不多解释,看代码: String s = "my.te ...
- JAVA字符串的替换replace、replaceAll、replaceFirst的区别解析。
String str = "i.like.cat"; System.out.println(str.replace(".", "!")); ...
- 字符串正则替换replace第二个参数是函数的问题
按照JS高程的说法,如下 replace()方法的第二个参数也可以是一个函数.在只有一个匹配项(即与模式匹配的字符串)的情况下,会向这个函数传递3个参数:模式的匹配项.模式匹配项在字符串中的位置和原始 ...
- MySQL replace函数替换字符串语句的用法(mysql字符串替换)
MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪. 最近在研究CMS,在数据转换的时候需要用 ...
- JQuery字符串替换replace方法
在日常的js开发中,常常会用到JQuery, 当要把字符串中的内容替换时,如果使用类似C#的string.replace方法,如下 var str='aabbccaa'; str=str.replac ...
随机推荐
- div垂直居中的4种方式方式
一.使用单元格居中 <!DOCTYPE html> <html> <head> <title>测试</title> </head> ...
- schemer校验器的简单应用
from schemer import Schema def func(account, password): request_params = { 'account': account, 'pass ...
- 【ZYNQ学习】各个主题的值得看的博客
在学习ZYNQ时会遇到不少问题,这时我们一方面要在DocNav找Xilinx的官方文档,另一方面要参考别人的一些记录的解决好的办法,我在学习的时候看到了不少大佬的博客,给我带来了很大帮助.在这篇博客, ...
- 0xc0000142怎么修复
0xc0000142怎么修复 参考链接 https://jingyan.baidu.com/article/4d58d54102f3d29dd4e9c0b1.html
- [IDEA]的常见优化
[IDEA]的常见优化 设置方法分割线和颜色 效果图 步骤 开启方法分割线 打开File -> Setting ->Editor ->General -> Appearance ...
- MindManager离线安装包官网下载
软件官网:https://www.mindjet.com/ 注意:不建议在思杰马克丁及其相关合作网站下载该软件,更不建议在其旗下站点购买该软件授权. 目前来说,官网正常下载的话它会要求你填写一些信息, ...
- 上传镜像到harbor
https://blog.csdn.net/weixin_45335305/article/details/123817541
- MySQL8.0的下载、安装、配置
转1: MySQL8.0的下载.安装.配置 MySQL8安装教程(下载.安装.连接.卸载) Navicat Premium 15激活(含注册机)
- flask-基础篇02 请求与响应
一.处理请求 1.URL路径参数(动态路由) # 例如,有一个请求访问的接口地址为/users/123,其中123实际上为具体的请求参数,表明请求123号用户的信息.此时如何从url中提取出123的数 ...
- SQL-分组聚合-子查询
-- having前面必须有group byselect e.deptno ,sum(e.sal) as sum_sal ,min(e.sal) as min_sal ,max(e.sal) as m ...