在C#中string关键字指向的是.NET的基类System.String。与字符串相关类还包含System.Text,System.Text.RegularExpressions和System.StringBuilder。
System.String类
String类是最常用的字符串相关的类。
首先string声明的字符串是可以当做数组来索引字符的。如下:
class Program
{
static void Main(string[] args)
{
string name = "chenyuxiang";
char char4=name[4];
Console.WriteLine(char4); //输出的为‘y’
Console.ReadKey();
}
}
一、常用的几种字符串方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TESTT
{
class Program
{
static void Main(string[] args)
{
string firstname = "xiang";
string FirstName = "XIANG";
string lastname = "chen";
string LastName = "CHEN";
//方法1:Compare(string1,string2,bool);返回两个字符串的关系相等为0,不等为1。bool为是否忽略大小写
Console.WriteLine(String.Compare(firstname,FirstName, true)); //对比两字符串关系并忽略大小写
Console.WriteLine(String.Compare(firstname,FirstName,false)); //对比两字符串关系并忽略大小写
//方法2:string1.CompateTo(string2);对比两个字符串关系,相等为0,不等为-1
Console.WriteLine(firstname.CompareTo(lastname));
//方法3:String.CompareOrdinal
Console.WriteLine(String.CompareOrdinal(firstname,FirstName));
//方法4:String.Concat(string1,string2,....,string) 将多个字符串合并成一个
Console.WriteLine(string.Concat(firstname,lastname)); //输出"xiangchen"
//方法5:string1.CopyTo(int,char[]s,int,int) //将指定的下标开始的特定数量的字符赋值到数组的一个全新的实例中
char[] copystring =new char[11]
{'a','b','c','d','e','f','g','h','i','j','k'};
firstname.CopyTo(1, copystring, 2, 3); //从firstname的第1个字符开始,拷贝到copystring字符数组的第2位开始,长度为3的位置
Console.WriteLine(copystring); //输出为"abianfghijk"
//方法6:string.jion(string1,string[] s,int startIndex,int length)
string[] copppp=
{
"asd",
"fgf",
"df"
};
Console.WriteLine(string.Join("/",copppp,0,3)); //输出的为asd/fgf/df
//方法7:string1.PadLeft(int weight,char c)/string.PadRight(int weight,char c) //指定宽度下,不足的在左边或右边填充指定的字符
Console.WriteLine(firstname.PadLeft(10,'*')); //输出的为*****xiang
Console.WriteLine(firstname.PadRight(10, '*'));//输出的为xiang*****
//方法8:string1.Split(char[] c)
string[] s = { };
s=firstname.Split(new char[]{'i','n'});
foreach (string ss in s)
{
Console.WriteLine(ss);
} //输出的为x a g。i和n 丢失了
//方法9:string1.Substring(int startIndex,int length)
Console.WriteLine(firstname.Substring(0,3)); //输出xia
//方法10;string1.IndexOfAny(char[] c,int startIndex,int Length) 判断字符数组c中那个字符先出现在string1中
string sd = "sdrgrtbzdvkmnieawjf";
Console.WriteLine(sd.IndexOfAny(new char[]{'a','n','g'},0,sd.Length)); //输出3,string1最先出现的为g,索引为3,所以返回为3
Console.ReadKey();
}
}
}
StringBuilder类
如下实例:
string name="12344";
name+="7890"; //最终只为123447890
上述的代码可以将字符串进行拼接。因为name空间分配时刚好可以容纳12344的值,所以后面的+操作会使系统重新开辟一段空间,并将12344和7890拼接后放入新的字符串空间内。显然这种操作非常低下。如果碰到平凡改变字符串长度的操作,此效率可想而知。
所以微软提供了一个新的类StringBuilder类来应对这种频繁改变字符串长度的类。
对于频繁改变字符串长度的最高效的方法便是替换而不是创建。这一点在LabVIEW中其实也提到过。我们可以事先创建一个字符串其容量足够的大,然后采用替换的方法进行更改。这样效率就提高了。StringBuilder类就是采用这种思想。
一、StringBuiler类的特性:
1、StringBuilder类的方法没有String类那么多
2、StringBuilder类通常分配的内存比保存的字符串的长度要长
3、可在编程中指定它的容量。
4、如果操作中实际字符串超过了它自身容量的话,默认情况加容量会在自动翻倍。
二、StringBuilder类的三大属性
1、Length 指定字符串的实际长度,存储多少是多少
2、Capacity 指定字符串在分配的内存中的容量。字符串超过此容量,则Capacity会翻倍。
3、MaxCapcity 指定字符串的最大容量,此值为字符串的最终的上限。字符串的值不会超过这个值。一般默认此值大概为20亿。
StringBuilder greetingBuilder = new StringBuilder("Hello from all the guys at Wrox Press.",150); //150为起始大小,超出自动翻倍
greetingBuilder.AppendLine("123");
Console.WriteLine(greetingBuilder.Capacity); //返回150
Console.WriteLine(greetingBuilder.Length); //返回43,指的的是存储字符串的实际长度
Console.WriteLine(greetingBuilder.MaxCapacity); //返回大约20亿左右
三、StringBuilder类的常用方法
StringBuilder s = new StringBuilder("1234567890");
//方法1:Append() 给当前的字符串追加一个字符串
Console.WriteLine(s.Append("asdfg")); //添加的字符串没有回车
Console.WriteLine(s.AppendLine("asdfgh"));//添加的字符串有回车
//方法2:AppendFormat() 给当前的字符串追加一个带有格式的字符串
Console.WriteLine(s.AppendFormat("这是带有格式的字符串{0}",3));
//方法3:Insert(int startIndex,object value) 给当前的字符串插入字符串
Console.WriteLine(s.Insert(1,"这是插入的字符串"));
//方法4:Remove(int startIndex,int length) 将当前的字符串删除指定字符串
Console.WriteLine(s.Remove(1,8));
//方法5:Replace() 将字符串中所有指定的字符串替换
Console.WriteLine(s.Replace('3','/',0,s.Length));
//方法6:ToString()