C# 中奇妙的函数–8. String Remove() 和 Replace()
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好像稍微简洁一点,因为你不需要指点起始点.
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 & markup was loaded from a data source.<BR/> Oh look, we started a new line!"; var cleansedData = test.Replace("<BR/>", Environment.NewLine); var moreCleansedData = test.Replace("&", "&")
.Replace(" ", " ")
.Replace("<BR/>", Environment.NewLine);
同时我对stringbuilder进行了相同的实验,发现在这种情况下stringbuilder 的运行速度非常的缓慢:
var morePerformantCleansedData = new StringBuilder(test)
.Replace("&", "&")
.Replace(" ", " ")
.Replace("<BR/>", Environment.NewLine)
.ToString();
C# 中奇妙的函数–8. String Remove() 和 Replace()的更多相关文章
- C# 中奇妙的函数–7. String Split 和 Join
很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列. 很多人都知道使用split()的方法,但使用与其对应的Join ...
- C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
今天,我们将着眼于五个用于序列的聚合运算.很多时候当我们在对序列进行操作时,我们想要做基于这些序列执行某种汇总然后,计算结果. Enumerable 静态类的LINQ扩展方法可以做到这一点 .就像之前 ...
- C# 中奇妙的函数–String Split 和 Join
很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列. 很多人都知道使用split()的方法,但使用与其对应的Join ...
- string中常用的函数
string中常用的函数 发现在string在处理这符串是很好用,就找了一篇文章放在这里了.. 用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重1.De ...
- string 中的 length函数 和size函数 返回值问题
string 中的 length函数 和 size函数 的返回值 ( 还有 char [ ] 中 测量字符串的 strlen 函数 ) 应该是 unsigned int 类型的 不可以 和 -1 ...
- 学习笔记之Java队列Queue中offer/add函数,poll/remove函数,peek/element函数的区别
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用. Java中Que ...
- C++中string::find()函数和string::npos函数的使用
1. string::find()函数和string::npos函数的介绍 我们在学习C++的时候必不可少的使用到string类中的find()函数,它是一个查找函数,功能还是很强大的,但是此处我们不 ...
- LoadRunner中的Web 函数列表
LoadRunner中的Web 函数列表 web test LoadRunner fuction_list D:\Program Files (x86)\Mercury Interactive\Mer ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
随机推荐
- gzez某蒟蒻lyy的博客
在gz,想去sn幻想乡也行,现在高一并且是已经高二但仍然是机房最弱,没救了 愿诸位身体健康 水平不行,写出来的东西很sb,但还是会偶尔记录一下... 数学公式测试:$\binom n{n_1\cdot ...
- Windows Server 2008 R2下将nginx安装成windows系统服务
一直在Linux平台上部署web服务,但是最近的一个项目,必须要用windows,不得已再次研究了nginx在windows下的表现,因为Apache httpd在Windows下表现其实也不算太好, ...
- 【洛谷】2602: [ZJOI2010]数字计数【数位DP】
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入输出格式 输入格式: 输入文件中仅包含一行两个整数a ...
- java并发基础(二)
<java并发编程实战>终于读完4-7章了,感触很深,但是有些东西还没有吃透,先把已经理解的整理一下.java并发基础(一)是对前3章的总结.这里总结一下第4.5章的东西. 一.java监 ...
- HTML5学习笔记3
7.文档元素 文档元素的主要作用是划分各个不同的内容,让整个页面布局清晰明快,让整个布局具有语义,进一步替代div.基本上没有什么实际作用效果,主要目的是在页面布局时区分各个主题和概念. h1~h6 ...
- 云计算大会有感—MapReduce和UDF
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.參会有感 首先还是非常感谢CSDN能给我票,让我有机会參加这次中国云计算峰会.感觉不写点什么对不 ...
- Android intent action大全
android.intent.action.ALL_APPSandroid.intent.action.ANSWERandroid.intent.action.ATTACH_DATAandroid.i ...
- delphi win64 DEBUG不能进预设断点的问题
delphi win64 DEBUG不能进预设断点的问题 delphi win64,debug模式下运行,如果含有中文路径,不能进断点,音频跟踪.而同样的代码,DELPHI WIN32却没有这个问题 ...
- 十大开源ERP点评 献给深水区的中小企业和CIO们
原文地址:http://www.oschina.net/news/58437/top-10-erp-software 如今,企业资源规划(ERP)和客户关系管理(CRM)系统的必要性已经被各种组织和企 ...
- 解决Fragment每次进入都加载的问题
1.首先了解一下fragment的生命周期 onCreate是指创建该fragment类似于Activity.onCreate,你可以在其中初始化除了view之外的东西,onCreateView是创建 ...