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 ...
随机推荐
- js date 相关
- BZOJ 2653: middle 主席树 二分
https://www.lydsy.com/JudgeOnline/problem.php?id=2653 因为是两个方向向外延伸所以不能对编号取前缀和(这里只有前缀和向后传递的性质,不是实际意义的和 ...
- C语言学习常见错误分析
错误分类 语法错 逻辑错 运行错 0.忘记定义变量: int main() { x=3;y=6; printf("%d/n",x+y); } 1.C语言的变量一定要先定义 ...
- 极域电子教室3个没被发现的bug(V6 2007)
bug1:破坏文件传输 在教师端文件分发时利用各种方法退出极域电子教室(包括http://sunnysab.blog.163.com/blog/static/180375009201323191111 ...
- Mac安装homebrew安装到指定目录
第一种直接安装在/usr/local目录下 mac 打开终端输入 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebr ...
- div模拟selection标签 下拉列表
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SSM框架搭建问题
环境: 1.eclipse Kepler Service Release 2 2.jdk 1.8 64 3.maven 3.5 4.tomcat 8 问题:
- The sigrok project
http://www.sigrok.org/wiki/Main_Page The sigrok project aims at creating a portable, cross-platform, ...
- window server 2012 更改密钥 更改系统序列号
由于在window server 2012当中,好像更改密钥的方法,给隐藏了,没办法激活,这里记录一下在网上查找到的一个命令行,如何在window server 2012 更改密钥 更改系统序列号 在 ...
- 埃及分解:将2/n分解成为1/x+1/y的格式
算法 古埃及以前创造出灿烂的人类文明,他们的分数表示却非常令人不解.古埃及喜欢把一个分数分解为类似: 1/a + 1/b 的格式. 这里,a 和 b 必须是不同的两个整数,分子必须为 1 比方,2/1 ...