C#编程(四十四)----------string和stringbuilder

System.String类

首先string类是静态的,System.String是最常用的字符串操作类,可以帮助开发者完成绝大部分的字符串操作功能,使用方便.

1.比较字符串

比较字符串是指按照字典排序规则,判定两个字符的相对大小.按照点点规则,在一本英文字典中,出现在前面的单词小于出现在后面的单词.在string类中,常用的比较字符串的方法包括Compare,CompareTo,CompareOrdinal以及Equals,下面进行详细的介绍.

Compare()方法是string类的静态方法,用于全面比较两个两个字符串对象,包括6种重载方法.CompareTo()方法将当前字符串对象与另一个 对象做比较,其作用与Compare类似,返回值也相同.CompareTo与Compare相比,区别在于:CompareTO不是静态方法,可以通过一个string对象调用;CompareTo没有重载形式,只能按照大小写敏感方法比较两个整串.

Equals()方法用于方便的判断两个字符串是否相同,有两种重载形式:

public bool Equals(string str)

public static bool Equals(string str1,string str2);

如果两个字符串相等,Equals()返回值为true;否则,返回False.

string支持两个比较运算符”==”和”!=”,分别用于判定两个字符串是否相等和不等,并区分大小写.相对于上面介绍的方法,这两个运算符使用起来更加直观和方便.

2.定位字符串和子串

定位子串是指在一个字符串寻找其中包含的子串或者某个字符,在string类中,常用的定位子串和字符的方法包括:StartsWith(),EndsWith(),IndexOf(),LastIndxOf(),IndexOfAny()以及LastIndexOf(),下面进行详细介绍:

StartsWith()/EndsWith()方法

可以判定一个字符串对象是否以另一个子做富川开头,如果是返回True;否则返回false,其定义为:public bool StartsWith(string value) //参数value即待判定的子字符串.

IndexOf()/LastIndexOf()

IndexOf()方法用于搜索一个字符串,某个特定的字符串或子串第一次出现的位置,该方法区分大小写,并从字符串的首字符以0技术.如果字符串中不包含这个字符或子字符串,则返回-1.共有如下6中重载形式:

定位子串:

int IndexOf(char value)

int IndexOf(char value , int StartIndex)

int IndexOf(char value,int startIndex int count)

定位子串:

int IndexOf(stringvalue)

int IndexOf(string value , int StartIndex)

int IndexOf(stringvalue,int startIndex int count)

在上述的重载行驶中,其参数含义如下

value:待定位的字符或者子串

startIndex:在总串中开始搜索的起始位置

Count:在总串中从起始位置 开始搜索的字符数.

IndexOfAny()/LastIndexOfAny()

其功能同IndexOf类似,其区别在于,可以搜索在一个字符串中,出现在一个字符串数组中的任意字符第一次出现的位置.同样,该方法区分大小写,并从字符串的首字符开始以0技术.如果字符串中不包括这个字符或子串,则返回-1.

同IndexOfAny类似,LastIndexOfAny用于搜索在一个字符串中,出现在一个字符数组中任意字符最后一次出现的位置。

案例:

string s = "hello";

char[] arr = { ‘H‘,‘e‘,‘l‘};

int i1 = s.IndexOfAny(arr);

int i2 = s.LastIndexOfAny(arr);

Console.WriteLine("IndexOfAny的结果是 :{0}  \nLastIndexOfAny的结果是 :{1}",i1,i2);

Console.ReadKey();

.IndexOfAny有三种重载形式:

int IndexOfAny(char [] anyOf)

int IndexOfAny(char [] anyOf,int startIndex)

int IndexOfAny(char [] anyOf,int startIndex,int count)

在上述重载行驶中,其参数含义如下:

anyOf:待定位的字符或者子串,方法将返回这个数组中任意一个字符第一次出现的位置

startIndex:在总串中开始搜索得起始位置

Count:在总串中从起始位置开始搜索的字符串

3.格式化字符串

Format()方法用于创建格式化的字符串以及连接多个字符串对象.FOrmat()方也有多个重载形式,最常用的是:

public static string Format(string format,params object [] args);

其中,参数format用于指定返回字符串的格式,而args为一系列变量参数.可以通过下面的实例来掌握其用法.

string strA = "hello", strB = "world",newStr="";

newStr = string.Format("{0},{1}",strA,strB);

Console.WriteLine(newStr);

在format参数中包含一些用大括号括起来的数字,如{0},{1},这些数字分别一一对应于args参数数组中的变量.在生成结构字符串时,将使用这些变量代替{i}.需要说明的是,这些变量并不是非得为string类型.在特定的应用中,format方法非常方便.例如,要输出一定个事的瞬间字符串,便可以使用format()方法,代码如下:

newStr = string.Format("CurrentTIme={0:yyyy:MM:dd}",System.DateTime.Now);

Console.WriteLine(newStr);

其中,格式字符串”yyyy:MM:dd”指定返回时间的格式形如”2015:7:21”.

4.连接字符串

Concat()方法用户谅解两个或多个字符串,Concat()方法也有多个重载形式,最常用的为:public static Concat(params string [] values);//其中values用于指定索要连接的多个字符串,可以死通过下面的实例来掌握其使用方法.

string newStr = string.Concat("hello"," ","world");

Console.WriteLine(newStr);

Join()方法利用一个字符数组和一个分割字符串构造新的字符串.常用于把多个字符串连接在一起,并用一个特殊的符号来分隔开.Join()方法的常用形式:public static string Join(string separator ,string [] values);//其中,参数separator 为指定的分隔符,而values用于指定所要连接的多个字符串数组,案例:

string strA = "hello", strB = "world",newStr="";

//newStr = string.Format("CurrentTIme={0:yyyy:MM:dd}",System.DateTime.Now);

//string newStr = string.Concat("hello"," ","world");

string []strArr={strA,strB};

//使用^^分隔字符串数组

newStr = string.Join("^^",strArr);

Console.WriteLine(newStr);

Console.ReadKey();

连接运算符”+”

string支持连接运算符”+”,可以方便的连接多个字符串,例如,下面把”hello”和”world”连接起来;

string newStr = "hello" + ",world";

Console.WriteLine(newStr);

5.分割字符串

使用前面介绍的Join方法,可以利用一个分隔符把多个字符串连接起来.反过来,使用Split方法可以把一个整串,按照某个分隔符,分裂成一系列小的字符串.例如,把整串”hello^^world”按照字符”^”进行分割,可以得到三个小的字符串,即”hello”,””(空串),”world”.

Split()方法有多个重载形式,最常用的形式为:

public string [] Split(params char [] separator)

其中参数separator数组包含分隔符.下例把”hello^^world”进行分割:

string newStr = "hello^^world";

char[] separator = { ‘^‘};

string[] splitStrings = new string[100];

splitStrings = newStr.Split(separator);

int i = 0;

while (i<splitStrings.Length)

{

Console.WriteLine("item:{0}  {1}",i,splitStrings[i]);

i++;

}

6.插入和填充字符串

string类包含了在一个字符串中插入新元素的方法,可以用insert()方法在任意位置插入任意字符.Insert()方法用于在一个字符串的指定位置插入另一个字符串,从而构造一个新的串,Insert()方法也有多个虫子形式,最常用的是:

public string Insert(int startIndex, string value);

其中,参数startIndex用于指定所要插入的位置,从0开始索引;value指定所要插入的字符串.

下例在”hello”的字符”h”后面插入”world”,最后的结果为”hworldello”:

string newStr = "";

newStr = "hello".Insert(1, "world");

Console.WriteLine(newStr);

7.删除和剪切字符串

Remove()方法从一个字符串的指定位置开始,删除指定数量的字符.最常用的形式为:

public string Remove(int startIndex,int count);

其中,参数startIndex用于指定开始删除的位置,从0开始索引;count指定删除的字符数量.下例中,将”hello”中的”ell”删除:

string newStr = "hello";

newStr = newStr.Remove(1, 3);

Console.WriteLine(newStr);

Trim()方法

若想把一个字符串首尾处的一些特殊字符删除,如去掉一个字符串首尾的空格等,可以使用string的Trim()方法.形式:

public string Trim();

public string Trim(params char [] trimChars);

其中,参数trimChars数组包含了指定要去除的字符,如果缺省,则删除空格符号.下例中,实现了对”@hello#$”的净化.

char[] trimChars = { ‘@‘,‘#‘,‘$‘};

string str = "@hello#$";

string newStr = str.Trim(trimChars);

Console.WriteLine(newStr);

8.复制字符串

string类包含了复制字符串方法Copy和CopyTo,可以完成对一个字符串及其一部分的复制操作.

Copy()方法可以把一个字符串复制到另一个字符数组中,形式为:public string Copy(string str);其中,参数str为需要复制的源字符串,方法返回目标字符串.

CopyTo()方法可以实现Copy同样的功能,但功能更为丰富,可以赋值字符串的一部分到一个字符数组中.另外CopyTo不是静态方法,其形式为:

public void CopyTo(int sourceIndex,char [] destination,int destinationIndex,int count);

其中,参数sourceIndex为需要复制的字符起始位置,destination为目标字符数组,destinationIndex指定目标数组中的开始存放位置,而count指定要复制的字符个数.

案例:

char[] newCharArr = new char[100];

"hello".CopyTo(2, newCharArr, 0, 3);

Console.WriteLine(newCharArr);

分析:把”hello”中的llo复制到newCharArr中.

9.替换字符串

要替换一个字符串中的某些特定字符或者某个子串,可以使用Replcace()方法来实现,其形式为:

public string Replace(char oldChar,char newStr);

public string Replac(string oldValue,string newValue);

其中,参数oldChar和oldValue为待替换的字符和子串,而newChar和newValue为替换后的新字符和新子串:

string newStr = "hello".Replace("ll", "r");

Console.WriteLine(newStr);

10.更改大小写:

string提供了方便转换字符串中所有字符大小写的方法ToUpper和TOLower.这两个方法没有输入参数,使用也非常方便.案例:

Console.WriteLine("hello".ToUpper());

Console.WriteLine("HELLO".ToLower());

总结:本节介绍了最常用的String类,并从比较、定位子串、格式化、连接、分裂、插入、删除、复制、大小写转换10个方面介绍了其方法。之所以称String对象为静态串,是因为一旦定义一个String对象,就是不可改变的。在使用其方法(如插入、删除操作)时,都要在内在中创建一个新的String对象,而不是在原对象的基础上进行修改,这就需要开辟新的内存空间。如果需要经常进行串修改操作,使用String类无疑是非常耗费资源的,这时需要使用StringBuilder类。

创建新的string对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.StringBuikder类.例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能.

通过用一个重载的构造函数方法初始化变量,可以创建StringBuilder类的新实例,示例如下:

StringBuilder sb=new StringBuilder(“hello,world”);

设置容量和长度

虽然StringBuilder 对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是你可以为它容纳的最大字符数指定一个值,此值称为该对象的容量,不应将它与当前StringBuilder 对象容纳的字符串长度混淆在一起.例如,可以创建StringBuilder类的带字符串”hello”(长度为5)的一个新实例,同时可以指定该对象的最大容量为25.当修改StringBuilder时,在达到容量之前,他不会为其自己重新分配空间.当达到容量时,将自动分配新的空间且容量翻倍.可以使用重载的构造函数之一来指定StringBuilder类的容量,下例指定可以将StringBuilder对象扩充到最大25个空白.

StringBuilder sb=new StringBuilder(“hello,world”,25);

另外,可以使用读/写Capacity属性来设置对象的最大长度.下例代码使用Capacity属性来定义对象的最大长度.

sb.Capacity=25;

EnsureCapacity方法可用来检查当前StringBuilder的容量

也可以查看或设置Length属性.如果将Length属性设置为大于Capacity属性的值,则自动将Capacity属性更改为与Length属性相同的值.如果将Length属性设置为小于当前StringBuilder 对象内的字符串长度的值,则会缩短该字符串.

修改 StringBuilder 字符串

方法名 使用

StringBuilder.Append 将信息追加到当前 StringBuilder 的结尾。

StringBuilder.AppendFormat 用带格式文本替换字符串中传递的格式说明符。

StringBuilder.Insert 将字符串或对象插入到当前 StringBuilder 对象的指定索引处。

StringBuilder.Remove 从当前 StringBuilder 对象中移除指定数量的字符。

StringBuilder.Replace 替换指定索引处的指定字符。

Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder 对象表示的字符串的结尾处。以下示例将一个 StringBuilder 对象初始化为“Hello World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Append(" What a beautiful day."); Console.WriteLine(MyStringBuilder);

  此示例将 Hello World! What a beautiful day. 显示到控制台。

AppendFormat

  AppendFormat 方法将文本添加到 StringBuilder 的结尾处,而且实现了 IFormattable 接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到 StringBuilder 的后面。以下示例使用 AppendFormat 方法将一个设置为货币值格式的整数值放置到 StringBuilder 的结尾。

int MyInt = 25; StringBuilder MyStringBuilder = new StringBuilder("Your total is "); MyStringBuilder.AppendFormat("{0:C} ", MyInt); Console.WriteLine(MyStringBuilder);

  此示例将 Your total is $25.00 显示到控制台。

Insert

  Insert 方法将字符串或对象添加到当前 StringBuilder 中的指定位置。以下示例使用此方法将一个单词插入到 StringBuilder 的第六个位置。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Insert(6,"Beautiful "); Console.WriteLine(MyStringBuilder);

  此示例将 Hello Beautiful World! 显示到控制台。

Remove

  可以使用 Remove 方法从当前 StringBuilder 中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用 Remove 方法缩短 StringBuilder。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Remove(5,7); Console.WriteLine(MyStringBuilder);

  此示例将 Hello 显示到控制台。

Replace

  使用 Replace 方法,可以用另一个指定的字符来替换 StringBuilder 对象内的字符。以下示例使用 Replace 方法来搜索 StringBuilder 对象,查找所有的感叹号字符 (!),并用问号字符 (?) 来替换它们。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!"); MyStringBuilder.Replace(’!’, ’?’); Console.WriteLine(MyStringBuilder);

时间: 2024-10-10 14:18:10

C#编程(四十四)----------string和stringbuilder的相关文章

shell编程(十四)--- until循环

until循环语法格式: until CONDITION do     statement done 说明: until进入循环的条件是:condition不成立时,就执行循环. until进入循环的条件正好和while相反,while进入循环的条件是:condition成立时,就进入循环. 示例1:while循环 [[email protected] Learn]# cat while.sh  #!/bin/bash declare -i sum=0 declare -i i=0 while 

ActionScript3游戏中的图像编程(连载四十四,第3章开始)

3.1 Flash简单滤镜真相大揭秘 上一章,我们用Flash的滤镜仅仅模拟了Photoshop里面的两个简单样式(当然只是我们的参数设置得比较简单,Photoshop样式远比我们想象中的复杂),就已经困难重重,一波三折了,而且效果还不如Photoshop的细致.那么,到底是什么原因导致Flash的简单滤镜如此受限?Flash简单滤镜是如何实现的? 进入本节之前,先明确下简单滤镜的概念,在ActionScript中,滤镜可以分为两大类,简单滤镜和复杂滤镜,前者指可以通过Flash IDE直接设置

NeHe OpenGL教程 第四十四课:3D光晕

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十四课:3D光晕 3D 光晕 当镜头对准太阳的时候就会出现这种效果,模拟它非常的简单,一点数学和纹理贴图就够了.好好看看吧. 大家好,欢迎来到新的一课,在这一课中我们将扩展glCamera类,来实现镜头光晕的效果.在日常生活中,

QT开发(四十四)——流方法解析XML

QT开发(四十四)--流方法解析XML 一.流方法解析XML简介 QT 4.3开始,QT引入了两个新的类来读取和写入XML文档:QXmlStreamReader和QXmlStreamWriter. QXmlStreamReader类提供了一个快速的解析器通过一个简单的流API来读取良构的XML文档,是作为QT的SAX解析器的替代者出现的,比SAX解析器更快更方便.    QXmlStreamReader可以从QIODevice或QByteArray中读取数据.QXmlStreamReader以一

【Unity 3D】学习笔记四十四:路径渲染

路径渲染 路径渲染属于特效渲染组件,用于跟随运动中的游戏对象.首先在hierarchy视图中,创建一个球体.然后在菜单导航栏中选择component--effects--trial renderer即可将路径渲染组件添加至该球体对象中. cast shadows:显示阴影效果. receive shadows:接受阴影效果. materials:材质. size:渲染的材质数量,可添加或删除. element 0:渲染材质文件. use light probes:是否使用光线探头. light

Android项目实战(四十四):Zxing二维码切换横屏扫描

原文:Android项目实战(四十四):Zxing二维码切换横屏扫描 Demo链接 默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候: <activity android:name=".CaptureActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> 这时候扫描

“全栈2019”Java第四十四章:继承

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第四十四章:继承 下一章 "全栈2019"Java第四十五章:super关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组". 全栈工

第四十四章

第四十四章1 听罗博士讲述名人的烦恼 名与身孰亲? 名气与身体哪个更重要? 名气固然是有用的,然而不能因此放弃身体. 各位朋友大家好,今天我们接着来聊<道德经>.我们来看看老子老先生带给我们什么样的人生启发了. 今天聊第四十四章,这是新的一章了,这一章实际跟我们的人生真是有很大的关系了,因为我这个音频,除了在我微信公众号刊出之外,还在喜马拉雅播出,喜马拉雅的编辑曾经跟我说:“罗老师您最近能不能讲讲养生的内容啊?”我接下来会给大家讲中医的内容的,但是您说我讲的<道德经>就不是养生吗?

【WPF学习】第四十四章 图画

原文:[WPF学习]第四十四章 图画 通过上一章的学习,Geometry抽象类表示形状或路径.Drawing抽象类扮演了互补的角色,它表示2D图画(Drawing)--换句话说,它包含了显示矢量图像或位图需要的所有信息. 尽管有几类画图类,但只有GeometryDrawing类能使用已经学习过的几何图形.它增加了决定如何绘制图形的画笔和填充细节.可将GeometryDrawing对象视为矢量插图中的形状.例如,可将标准的窗口元文件格式(.wmf)转换成准备插入用户界面的GeometryDrawi

程序员的奋斗史(四十四)——大学断代史(八)——大学的友谊

文/温国兵 我不是一个善于表达的人,但很庆幸大学里结实了几个知己. 原本我是其他寝室的,缘分使然,让我和现在的室友相聚.和好友A.好友B.好友C之间发生了太多太多,以至于太多回忆从脑海中隐隐浮现.A在我的正前方,无数个夜晚不知道他在被窝里做些什么,我睡了很久还依稀可以听见他的声音.大学和A同学谈得最多,每次都是相当长的时间,在我的心里,一直把他当做大哥.每一次谈话都从中收获颇丰,增长不少见识.也是A同学让我变得比以前开朗.同一件事情,他比较乐观,我比较悲观:他看到最多的是希望,我看到最多的是绝望