private string MyReplace(string json, string keyWord, string newWord, Func<string, string, bool> func)
{
StringBuilder sb = new StringBuilder();
int preIndex = 0;
int oldLen = keyWord.Length;
int lastIndex = json.LastIndexOf(keyWord); while (true)
{
int idx = json.IndexOf(keyWord, preIndex); if (idx < 0)
{
return json;
} var temp = json.Substring(preIndex, idx - preIndex);
sb.Append(temp);
var temp1 = string.Empty;
var temp2 = string.Empty; if (idx - 1 < 0)
{
temp1 = "";
}
else { temp1 = json.Substring(idx - 1, 1);
}
if (idx + oldLen >= json.Length)
{
temp2 = "";
}
else
{
temp2= json.Substring(idx + oldLen, 1);
}
if (func(temp1,temp2))
{ sb.Append(newWord);
}
else
{
sb.Append(keyWord);
} preIndex = idx + oldLen; if (preIndex > lastIndex)
{
break;
} }
if (preIndex < json.Length)
{
sb.Append(json.Substring(preIndex));
} return sb.ToString(); }

测试代码:

 string json = "\"abc\"{\"abc\":\"13\",\"jeabcje\":23,\"jabc\":234,\"abcJ\":567,\"a13\":323,\"ggg\":\"end\"}\"abc\":12abc3";

            string keyWord = "abc";
string newWord = "Keys";
string str = MyReplace(json, keyWord, newWord, (a, b) => { return a == "\"" && b == "\""; });

主要功能是把json里 属性替换掉,比如"abc"属性 替换成“Keys”,而不会把“jeabcje”这种包含abc的属性也替换为Key。

func是你的特殊条件,当满足这个条件,才会替换关键字。

【C#】字符串按条件替换关键字的更多相关文章

  1. mysql 字符串 拼接 截取 替换

    一. 字符串拼接 concat('asdf',str); 说明: 拼接asdf 和 str 二. 字符串截取 从左开始截取字符串 left(str, length) 说明:) as abstract ...

  2. 在Vi里面实现字符串的批量替换

    在Vi里面实现字符串的批量替换. a. 文件内全部替换: %s#abc#def#g(用def替换文件中所有的abc) 例如把一个文本文件里面的"linuxidc.com"全部替换成 ...

  3. linq字符串搜索条件,排序条件-linq动态查询语句 Dynamic LINQ

    在做搜索和排序的时候,往往是前台传过来的字符串做条件,参数的数量还不定,这就需要用拼sql语句一样拼linq语句.而linq语句又是强类型的,不能用字符串拼出来. 现在好了,有个开源的linq扩展方法 ...

  4. python字符串截取与替换的例子

    python字符串截取与替换的多种方法 时间:2016-03-12 20:08:14来源:网络 导读:python字符串截取与替换的多种方法,以冒号分隔的字符串的截取方法,python字符串替换方法, ...

  5. 剑指offer 1,输入一个字符串,将字符串的空格替换成%20

    剑指offer 1,输入一个字符串,将字符串的空格替换成%20    function replaceSpace(str){      return str.replace(/\s/g,"% ...

  6. angluarjs实现过滤并替换关键字

    html样式 <body ng-app="myapp" ng-controller="myCtrl"> <input type="t ...

  7. 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)

    原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  8. js replace替换字符串,同时替换多个方法

    在实际开发中,经常会遇到替换字符串的情况,但是大多数情况都是用replace替换一种字符串,本文介绍了如何使用replace替换多种指定的字符串,同时支持可拓展增加字符串关键字. let conten ...

  9. 笔记二:JS的输出、语法、语句、字符串、条件语句、switch语句、for循环、while循环

    1.JS的输出: 注意:JS没有任何打印或者输出的函数 JS输出数据的集中方法:  1.使用window.alert()弹出警告框: 2.使用document.write()方法将内容写到HTML文档 ...

  10. kotlin字符串模板&条件控制

    字符串模版: 小时候都有要求记日记的习惯,下面是一小学生记的日记: 很漂亮的流水账,那细分析一下这些文件其实大体都类似,只有几个不同点: 其实就是地点变了,那对于这种有规律的文字可以采用kotlin的 ...

随机推荐

  1. 在ECS上安装部署openGauss数据库指导手册

    在 ECS 上安装部署 openGauss 数据库指导手册 文档下载:在 ECS 上安装部署 openGauss 数据库指导手册.docx 前 言 简介 openGauss 是关系型数据库,采用客户端 ...

  2. vue2.0中watch用法

    watch:观测Vue实例上的数据变动,对应一个对象,键:就是需要监测的那个东西,值:1.可以是当键变化时执行的函数,有两个参数,第一个是变化前的值,第二个是变化后的值.2.可以是函数名,得用单引号包 ...

  3. stm32串口晶振不对输出乱码+汇承HC-14lora模块

    最近要用到一个lora无线透传模块,然后就先用两个32开发板(用的STM32F103C8T6)试试简单的收发数据.结果,第一步串口发送一句话就寄了,我串口打印了"hi",结果出现了 ...

  4. 蚂蚁一面:GC垃圾回收时,内存分配和回收策略有哪些?

    文章首发于公众号:腐烂的橘子 蚂蚁面试主要为电话面试,期间也会要求使用编辑器手写算法题.作为一线互联网大厂,Java 基础知识是必备的,其中垃圾回收也是面试过程中的重中之重. Java 内存的自动管理 ...

  5. 模拟IDC spark读写MaxCompute实践

    简介: 现有湖仓一体架构是以 MaxCompute 为中心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不愿意对公网暴露集群内部信息,需要从 Hadoop 集群发起访问云上的数据.本文以 ...

  6. OpenYurt 如何 “0 侵入” 攻破云边融合难点

    简介: 随着 5G.IoT.直播.CDN 等行业和业务的发展,越来越多的算力和业务开始下沉到距离数据源或者终端用户更近的位置,以期获得很好的响应时间和成本,这是一种明显区别于传统中心模式的计算方式-- ...

  7. 可观测告警运维系统调研——SLS告警与多款方案对比

    简介: 本文介绍对比多款告警监控运维平台方案,覆盖阿里云SLS.Azure.AWS.自建系统(ELK.Prometheus.TICK)等方案. 前言 本篇是SLS新版告警系列宣传与培训的第三篇,后续我 ...

  8. 使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息

    简介: 本文将 rocktmq-spring-boot 的设计实现做一个简单的介绍,读者可以通过本文了解将 RocketMQ Client 端集成为 spring-boot-starter 框架的开发 ...

  9. 所有前端都要看的2D游戏化互动入门基础知识

    简介: 在非游戏环境中将游戏的思维和游戏的机制进行整合运用,以引导用户互动和使用 本文作者:淘系前端团队-Eva.js作者-明非 背景 现在越来越多的公司和 App 开始使用游戏化的方式去做产品了,所 ...

  10. [Gin] gin-jwt 中间件的请求流程与使用思路

    gin-jwt 中间件是对 jwt-go 的封装以适应 gin 框架.gin-jwt 对不同的请求流程有不同的 handler: 登录请求流程 是用 LoginHandler. 需要 jwt 令牌的后 ...