C#基础-string类

几乎任何一个项目都离不开对字符串的处理,在C和C++编程中,许多程序的漏洞都是由于字符串缓冲区溢出造成的。为了避免在C#中出现类似的问题,同时也为了使用更方便,C#中专门设置了两个字符串处理类:String类和StringBuilder类。

声明String类时可以用String也可以用string。例如:

string myString = "some text";
也可以写为:
String myString = "some text";
String类表示的是一系列不可变的字符。说其实例是“不可变的”,是因为无法直接修改给该字符串分配的堆中的字符串。比如在myString的后面街上另一个字符串:
myString+=" and a bit more";
其实际操作并不是在原来myString所占内存空间的后面直接附加上第二个字符串,而是返回一个新String实例,即重新为新字符串分配内存空间。显然,如果这种操作非常多,对内存的消耗是非常大的。
解决这个问题的办法是使用System.Text.StringBuilder类。
在C#中,可以在字符串前面加上字符@表示该字符串中的所有字符是其原来的含义,而不是解释为转义符。例如:
string str="C:\\test\\first.cs";
也可以表示为:
string str=@"C:\test\first.cs";
字符串前面的@表示字符串内容按原样输出,不使用转义。比较两种表示形式可以看出,显然前面加@符号的表示形式要比使用转义符的表示形式更直观。
如果要得到string中的某个字符,可以使用类似下面的办法:
string myString = "some text";
char chFirst = myString[2];	//结果为m
需要注意的是,string是Unicode字符串,即每个英文字母占两个字节,每个汉字也是两个字节。在计算字符串长度时,每个英文字母的长度为1,每个汉字的长度也是1。
例如:
string str="ab 张三cde";
Console.WriteLine(str.Length);	//输出结果:7

1、字符串的表示格式

可以使用Format方法将字符串表示为规定的格式。规定格式的一般形式为:
{N [,M][:formatCode]}
其中:
N是从0开始的整数,表示第几个参数。
M是一个可选参数,表示最小宽度。若该参数的长度小于M,就用空格填充。如果M为负,则左对齐;如果M为正,则右对齐。如果未指定M,则默认为0。

formatCode是可选的格式化代码字符串。下表列出部分格式示例。

格式符含义示例:(int i=10;double x=10.5)结果
C将数字按照金额形式输出Console.WriteLine("{0:C}",i);¥10.00
Console.WriteLine("{0:C}",x);¥10.50
D输出整数Console.WriteLine("{0:D}",i);10
Console.WriteLine("{0:D5}",x);00010
F小数点后位数固定Console.WriteLine("{0:F}",i);10.00
Console.WriteLine("{0:F4}",x);10.5000

使用格式时必须用“{”和“}”将格式与其他字符分开。如果恰好在格式中也要使用大括号,可以用连续的两个大括号表示一个大括号。
有时可能需要输出一些特殊格式的数字,比如在某些位置使用指定的占位符等,这时需要使用特殊的表示方法,常用有:
1、0占位符,如果数字位数不够指定的占位符位数,则左边补0至占位符位数,例如数字123按照“00000”的格式输出结果为:00123;如果数字位数超过指定的占位符位数,则原样输出,例如12345按照“000”的格式输出结果为12345;如果小树部分的位数超出指定的占位符位数,则多余的部分四舍五入,例如:123.64按照“0000”的格式输出结果为0124,按照“0000.0”格式输出结果为0123.6,按照“0000.000”的格式输出结果为0123.640.可见,0占位符一般用于输出固定位数的数字。
2、#占位符,对整数部分,去掉数字左边的无效0;对小数部分,按照四舍五入原则处理后,再去除右边的无效0.例如,数字0123按照“#####”的格式输出结果为123;按照“##”的格式输出结果仍为123;123.64按照“####”的格式输出结果为124,按照“####.#”格式输出结果为123.6,按照“###.###”的格式输出结果为123.64;123.04按照“###.#”的格式输出结果为123。注意,如果这个数就是0,而又不想让它显示的时候,#占位符很有用。例如0按照“#####”的格式什么都不会输出。
下面举例说明格式化字符串的用法。

(1)在ToString中使用d格式

int i=12345;
//i.ToString("d")	表示将i按照实际整数宽度转换为字符串
string str=i.ToString("d");
Console.WriteLine(str);	//结果为12345
//i.ToString("d8")	表示将i转换为字符串,宽度为8位,不够8位左边用0填充
string str1 = i.ToString("d8");
Console.WriteLine(str1); //结果为00012345
(2)在string.Format中使用d格式
int i=123
double j=123.45
//{0,7:d}表示第0个参数,宽度为7位,不够7位左边用空格填充,d表示十进制整数
string s1=string.Format("the value is{0,7:d}",i);
Console.WriteLine(s1);	//结果为 the value is      123
//{0,7:f3}表示第0个参数,总宽度为7位,其中小数部分占3位,不够7位左边填充空格
string s2=string.Format("the value is {0,7:f3}",j);
Console.WriteLine(s2);	//结果为the value is 123.450
(3)在ToString中使用f格式
double i=12345.6789;
//f2表示浮点数小数部分为2位,多余部分四舍五入,不够时右边补0
string str=i.ToString("f2");
ConSole.WriteLine(str);	//结果为12345.68
string str1=i.ToString("f6");
Console.WriteLine(str1);  //结果为 12345.678900
(4)在ToString中使用n格式
double i=12345.6789
//n表示整数部分从小数点向左每3位使用逗号分隔开,小数部分2位,多余部分四舍五入
string str=i.ToString("n");
Console.WriteLine(str);	//结果为12,345.68
//n4表示整数部分从小数点向左每3位用逗号分隔开,小数部分4位,多余部分四舍五入
string str1=i.ToString("n4");
Console.WriteLine(str1);  //结果为12,345.6789
(5)在ToString中使用p格式
double i=0.126
//p表示百分数格式
string s=string.Format("the value is {0,p}",i);
Console.WriteLine(s);	//结果为the value is 12.6%
string str=i.ToString("p");
Console.WriteLine(str); //结果为12.6%
(6)日期与时间格式化表示
DateTime dt = new DateTime(2003,5,25);
//yy表示年占两位,M表示月占1位,超过1位按实际位数
//d表示日占1位,超过1位按实际位数
string str=dt.ToString("yy.M.d");
Console.WriteLine(str);  //结果为03.5.25
//yyyy表示年占4位,M表示月占1位,超出1位按实际位数,其他按原字符输出
string str1=dt.ToString("yyyy年M月");
Console.WriteLine(str1); //结果为2003年5月
(7)指定位数和对齐方式
int i=123;
double j=123.45;
//{0,-7}表示第0个参数左对齐,占7位,不够7位右边补空格
//{1,7}表示第1个参数右对齐,占7位,不够7位左边补空格
string s=string.Format("i:{0,-7},j:{1,7}",i,j);
Console.WriteLine(s);	//结果为i:123    ,j:123.45
(8)使用占位符表示
int i=00012;
string str=string.Format("{0:###,###.00}",i);
Console.WriteLine(str);	//结果为12.00
i=0;
str=string.Format("{0:###}",i);
Console.WriteLine(str);	//结果是什么都不输出

2 常用字符串操作方法

由于绝大部分网络编程都离不开字符串操作,所以最好能熟练地掌握在C#中如何使用字符串。下面举例说明常用的一些方法。
(1)生成字符串
string str1="this is a string.";
string str2=str1;
string str3=new string('a',4);
Console.WriteLine(str3);	//结果为"aaaa"
(2)比较两个字符串
可以用string.Compare(string strA,string strB)比较两个字符串大小,它返回3中可能的结果:
如果strA大于strB,结果为1
如果strA等于strB,结果为0
如果strA小于strB,结果为-1
而string.Compare(string strA,string strB,bool ignoreCase)在比较两个字符串大小时还可以决定是否区分大小写。
Console.WriteLine(string.Compare(str1,str2));	//结果为0
Console.WriteLine(string.Compare(str1,str3));	//结果为1
Console.WriteLine(string.Compare(str3,str1));	//结果为-1
也可以用Equals(string a,string b)比较两个字符串是否相等,或者直接使用“==”比较两个字符串是否相等。如:
Console.WriteLine(string.Equals(str1,str2));	//结果为True
Console.WriteLine(str1==str2);			//结果为true
(3)查找指定字符串在字符串中出现的位置
利用IndexOf(string str)可以求str在字符串中首次出现的位置。
利用LastIndexIf(string str)可以求str在字符串中最后一次出现的位置。
例如,对前面生成的字符串:
Console.WriteLine(str1.IndexOf("is"));	//结果为2(注意序号从0开始)
Console.WriteLine(str1.LastIndexOf("is")); //结果为5
(4)在一个字符串的指定位置插入指定的字符串
利用Insert(int startIndex,string str)可以在startIndex处插入字符串str。
例如,对前面生成的字符串:
Console.WriteLine(str1.Insert(2,"abc"));	//结果为thabcis is a string.
(5)从字符串中删除指定数量的字符。
利用Remove(int startIndex,int count)可以删除从startIndex开始的count个字符。
例如,对前面生成的字符串:
Console.WriteLine(str1.Remove(1,2));  //结果为ts is a string.
(6)字符串替换
利用Replace(string oldStr,string newStr)可以将字符串中所有的oldStr替换为newStr。
例如,对前面生成的字符串:
Console.WriteLine(str1.Replace("is","xy"));	//结果是thxy xy a string.
(7)分离字符串
利用Split(char[] separator)可以将字符串按照指定的字符进行分离。
例如,对前面生成的字符串:
string[] str=str1.split(' ');
for(i=0;i<str.Length;i++)
{
  Console.WriteLine(str[i]);
}
输出结果为:
this
is
a
string.
(8)把字符串中的字符复制到一个字符数组中。
利用ToCharArray可以将字符串转换为字符串数组。
例如,对前面生成的字符串:
char[] charArray=new char[20];
charArray=str1.ToCharArray();
(9)字符串中字母的大小写转换
利用ToUpper可以将字符串中的所有英文字母转换为大写;利用ToLower可以将字符串中的所有英文字母转换为小写。
例如,对前面生成的字符串:
Console.WriteLine(str1.ToUpper());	//结果为THIS IS A STRING.
(10)从字符串开头或者结尾删除指定的字符
可以利用TrimStart删除字符串首部空格,利用TrimEnd删除字符串尾部空格,利用Trim删除字符串首部和尾部的空格。例如:
string s1="  this is a book";
string s2="that is a pen   ";
string s3="  is a pen   ";
Console.WriteLine(s1.TrimStart());	//删除首部空格
Console.WriteLine(s2.TrimEnd());	//删除尾部空格
Console.WriteLine(s3.trim());		//删除首部和尾部空格
(11)填充某个字符到字符串中,使总长度等于指定长度
利用PadLest(总长度,字符)将指定字符重复填充到已有的字符串的左边,使总长度等于指定长度;或者利用PadRight(总长度,字符)将指定字符重复填充到已有的字符串的右边,使总长度等于指定长度。例如:
string str="a";
string str1=str.PadLeft(5,'e');	//结果为 eeeea
Console.WriteLine(str1);
string str2=str.PadRight(5,'e'); //结果 aeeee
Console.WriteLine(str2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广哥教打杂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值