http://www.cnblogs.com/multiplesoftware/archive/2011/09/27/2192710.html

当对字符串进行操作时,我们经常要删除或者是替换一部分子字符串。 Remove() 和 Replace() 两个函数在这种情况就派上用场了。

Remove() – 删除一部分子字符串

我们都知道 substring 可以返回字符串的一部分。 当我们想保留字符串中的一部分substring丢弃其它部分时,就可以使用substring,当我们想删除字符串的一部分并保留其它部分时,就使用Remove。

Remove 有两种形式:

  • Remove(int startIndex)

    • 删除此字符串中从指定位置到最后位置的所有字符。
  • Remove(int startIndex, int length)
    • 从此实例中的指定位置开始删除指定数目的字符。

Remove 会进行区域的检查,

对于第一种形式 当

1. startIndex 小于零 或

2. startIndex 指定的位置不在此字符串内;

对于第二种形式当

1. startIndex 或 count 小于零 或

2. startIndex 加 count 之和指定一个此实例外的位置。

会抛出异常。

在Remove() 和 substring()两者中,选择哪一个应该是很容易的,看下面的实例:

string test = "Now is the time for all good men to come to the aid of their country.";

// 取头 10 个字符
var sliceUsingSubstring = test.Substring(0, 10); // 删除第10个字符后的所有字符
var sliceUsingRemove = test.Remove(10);

如果我们想获取前面10个字符,两种方法都是可以用的,但是Remove好像稍微简洁一点,因为你不需要指点起始点.

那么如果你想获取最后的10个字符呢?
string test = "Now is the time for all good men to come to the aid of their country.";  
// 获取从 length - 10 到最后的部分.
var sliceUsingSubstring = test.Substring(test.Length - 10); // 删除从头到 length - 10, 其余留下
var sliceUsingRemove = test.Remove(0, test.Length - 10);

在这种情况下,substring 看上去更加的简洁了。

现在看来,它们的确是八斤八两,但是.net 在这一类的情况下提供了两种方式,可以完全凭你的喜好来使用。

但是当我们要保留或者删除字符串中间一段时,就可以看出它们的不同了:

// 取从第 10 个开始长度为 10 的子串
var sliceUsingSubstring = test.Substring(10, 10);
// 删除从第20个字符之后的部分, 再删除头 10个
var sliceUsingRemove = test.Remove(20).Remove(0, 10);

在这种情况下,很明显substring简便易读,而且只需要一次操作。

但是如果我们想要删除中间的一段字符串:

// 取从0开始,长度为10的子串, 再取从第20 开始到末尾的部分
var sliceUsingSubstring = test.Substring(0, 10) + test.Substring(20);
// 从第10开始删除 10 个字符
var sliceUsingRemove = test.Remove(10, 10);

当使用于这种情况时, remove 明显更简单,更易读。

Replace() – 替换 char 或 String

将此实例中的指定 Unicode 字符或 String 的所有匹配项替换为其他指定的 Unicode 字符或 String

两种重载的形式

  • Replace(char oldChar, char newChar)

    将此实例中的指定 Unicode 字符的所有匹配项替换为其他指定的 Unicode 字符。

Replace(string oldValue, string newValue)

将此实例中的指定 String 的所有匹配项替换为其他指定的 String

string test = "Now is the time for all good men to come to the aid of their country.";
var politicallyCorrect = test.Replace("men", "people");
var spacesToPipes = test.Replace(' ', '|');

var withoutThe = test.Replace("the ", string.Empty);

下一个例子是当你有一块数据包含 “<BR/>” HTML 的代码时,想将它换成 Environment.NewLine:

string test = "Some data &amp; markup was loaded from a data source.<BR/>&nbsp;Oh look, we started a new line!";

var cleansedData = test.Replace("<BR/>", Environment.NewLine);

var moreCleansedData = test.Replace("&amp;", "&")
.Replace("&nbsp;", " ")
.Replace("<BR/>", Environment.NewLine);

同时我对stringbuilder进行了相同的实验,发现在这种情况下stringbuilder 的运行速度非常的缓慢:

var morePerformantCleansedData = new StringBuilder(test)
.Replace("&amp;", "&")
.Replace("&nbsp;", " ")
.Replace("<BR/>", Environment.NewLine)
.ToString();

C# 中奇妙的函数–8. String Remove() 和 Replace()的更多相关文章

  1. C# 中奇妙的函数–7. String Split 和 Join

    很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列. 很多人都知道使用split()的方法,但使用与其对应的Join ...

  2. C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)

    今天,我们将着眼于五个用于序列的聚合运算.很多时候当我们在对序列进行操作时,我们想要做基于这些序列执行某种汇总然后,计算结果. Enumerable 静态类的LINQ扩展方法可以做到这一点 .就像之前 ...

  3. C# 中奇妙的函数–String Split 和 Join

    很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列. 很多人都知道使用split()的方法,但使用与其对应的Join ...

  4. string中常用的函数

    string中常用的函数 发现在string在处理这符串是很好用,就找了一篇文章放在这里了.. 用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重1.De ...

  5. string 中的 length函数 和size函数 返回值问题

    string 中的 length函数 和 size函数 的返回值  (  还有 char [ ] 中 测量字符串的  strlen 函数 ) 应该是 unsigned int 类型的 不可以 和 -1 ...

  6. 学习笔记之Java队列Queue中offer/add函数,poll/remove函数,peek/element函数的区别

    队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. Java中Que ...

  7. C++中string::find()函数和string::npos函数的使用

    1. string::find()函数和string::npos函数的介绍 我们在学习C++的时候必不可少的使用到string类中的find()函数,它是一个查找函数,功能还是很强大的,但是此处我们不 ...

  8. LoadRunner中的Web 函数列表

    LoadRunner中的Web 函数列表 web test LoadRunner fuction_list D:\Program Files (x86)\Mercury Interactive\Mer ...

  9. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

随机推荐

  1. 你的跑步姿势正确吗? 教你正确跑步姿势 & 常识

    转载!!!!!搞IT必须运动一下 前言: 最近两年跑步的人越来越多,跑步在大部分人的观念中都是毫无技术含量,只要迈开腿就行了,其实这也是造成大多数跑步人士伤病的根源.对跑步的认知不足,跑步是一项看起来 ...

  2. Hibernate与Mybatis对比

    Hibernate与Mybatis对比 两者相同点 Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由Ses ...

  3. codevs 1005 生日礼物

    1005 生日礼物  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 9月12日是小松的朋友小寒的生日.小松知 ...

  4. 谁是最快的Go Web框架

    根据Julien Schmidt测试框架中测试到的go web框架,在加上lion,fasthttp,一共测试了下面的web框架. default http macaron go-json-rest ...

  5. Wannafly挑战赛22游记

    Wannafly挑战赛22游记 幸运的人都是相似的,不幸的人各有各的不幸. --题记 A-计数器 题目大意: 有一个计数器,计数器的初始值为\(0\),每次操作你可以把计数器的值加上\(a_1,a_2 ...

  6. poj 2623 Sequence Median 堆的灵活运用

    I - Sequence Median Time Limit:1000MS     Memory Limit:1024KB     64bit IO Format:%I64d & %I64u ...

  7. visio2013 激活工具,仅供交流学习

    visio2013激活软件 环境是 win7, 64 bit 装了 visio 2013 , 可以却不能用它来画图,在网上找了一些破解工具,大都不能解决问题.网上不靠谱的广告型文章太多了 所幸,终于找 ...

  8. LAMP架构之NFS

    需求分析: 前端需支持更大的访问量,单台Web服务器已无法满足需求了,则需扩容Web服务器: 虽然动态内容可交由后端的PHP服务器执行,但静态页面还需要Web服务器自己解析,那是否意味着多台Web服务 ...

  9. Vanish 详解

    1.varnish 概述:     varnish是一款高性能且开源的方向代理服务器和HTTP加速器,它的开发者poul-Henning kamp FreeBSD 核心的开发人员之一.varnish采 ...

  10. Git_删除文件

    在Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txt到Git并且提交: $ git add test.txt $ git commit -m "add test. ...