您的位置:首页 > 其它

认识String类别与String类别操作方式

2005-09-16 16:08 441 查看
在此系列文章中,将介绍一些撰写应用程序逻辑将常会使用到的类别,和这些类别提供的常用属性、方法。这回让我们来认识String类别与Sringr的操作方式。
在应用程序当中,常常需要依不同的情况处理字符串显示的样式。兴例来说,若应用程序需显示时间,你可能需要将DateTime型别的数据转换成字符串来输出;或者是将数值型别的资料,加上千分位与货币符号显示。
.NET Frameword的System命名下包含一个String类别,它提供许多的属性和方法,以认你透过程序来操作String型别的数据。常用的字符串操作方法见下表:
方法
说明
Format格式化输出的字符串
Trim去除字符串前后的空白
TrimStart去除字符串前方的空白
TrimEnd去除字符串后方的空白
Compare比较字符串大小
IndexOf搜寻字符串中是否包含特定的字符
Replace将某一个unicode字符取代成另一个unicod字符
Substring萃取字符串的部份数据
ToUpper将字符串的内容改成大写
ToLower将字符全部改成小写
Split将字符串切割后,放到数组这中
接着我们来以一个实例来探讨一些常用方法。
操作字符串的技术使用主控台应用程序来展示使用操作字符串的方法。namespace UseString
{
using System;
public class TestSting
{
[STAThread]
public static void Main(string[] args)
{
Console.WriteLine("String.Format(/"int={0},string={1},datetime={2}/",10,/"Vivid/",DateTime.Now)");
Console.WriteLine(String.Format("->int={0},string={1},datetime={2}",10,"Vivid",DateTime.Now));
Console.WriteLine();
Console.WriteLine("String.Format(/"Now ={0:yyyy-MM-dd}/",DateTime.Now)");
Console.WriteLine(String.Format("->Now ={0:yyyy-MM-dd}",DateTime.Now));
Console.WriteLine();
Console.WriteLine("String.Format(/"Now = {0:D}/",DateTime.Now)");
Console.WriteLine(String.Format("->Now = {0:D}",DateTime.Now));
Console.WriteLine();
Console.WriteLine("String.Format(/"My Number={0:000000.00}/",1000.00)");
Console.WriteLine(String.Format("->My Number={0:000000.00}",1000.00));
Console.WriteLine();
Console.WriteLine("String.Format(/"My Number={0:#######.00}/",1000.00)");
Console.WriteLine(String.Format("->My Number={0:#######.00}",1000.136));
Console.WriteLine();
Console.WriteLine("String.Format(/"My Number={0:C}/",1000.00)");
Console.WriteLine(String.Format("->My Number={0:C}",1000.00));
Console.WriteLine();
Console.WriteLine("String.Format(/"My Number={0:C3}/",1000.00)");
Console.WriteLine(String.Format("->My Number={0:C3}",1000.00));
Console.WriteLine();
Console.WriteLine("String.Format(/"My Number={0:N3}/",1000.00)");
Console.WriteLine(String.Format("->My Number={0:N3}",1000.00));
Console.WriteLine();
Console.WriteLine("->String.Compare(/"Vivid/",/"VIVID/",false)={0}",String.Compare("Vivid","VIVID",false));
Console.WriteLine("->String.Compare(/"Vivid/",/"VIVID/",true)={0}",String.Compare("Vivid","VIVID",true));
Console.WriteLine();
Console.WriteLine("string s=/"H/ello,V/ivid /";");
string s = "H/ello,V/ivid ";
Console.WriteLine("->s.IndexOf(/",/") = {0}",s.IndexOf(","));
Console.WriteLine("->s.LastIndexOf(/"//") = {0}",s.LastIndexOf("/"));
Console.WriteLine("->s.Replace(/" /",/"_/") = {0}",s.Replace(" ","_"));
Console.WriteLine("->s.Replace(/"//",/",/") = {0}",s.Replace("/",","));
Console.WriteLine("->s.Substring(3,4)= {0}",s.Substring(3,4));
Console.WriteLine();
Console.WriteLine("s = s.ToUpper()");
s = s.ToUpper();
Console.WriteLine("->s. = {0}",s);
Console.WriteLine();
Console.WriteLine("s = s.Replace(/"//",/",/"); ");
s = s.Replace("/",",");
Console.WriteLine("->s = {0}",s);
Console.WriteLine();
Console.WriteLine("string[] sa = s.Split(new char[] {','});");
string[] sa = s.Split(new char[] {','});
int nIndex = 0;
Console.WriteLine("foreach(string o in sa)");
foreach (string o in sa)
{
Console.WriteLine("->{0} = {1}",nIndex++,o);
}
}
}
}
UseString范例中撰写许多处理字符串的程序代码,分述于下。
使用Format方法
String类别的Format方法可以将字符串数据转换成不同的格式来显示。我们先来讲DateTime型别的格式化处理。 Console.WriteLine("String.Format(/"int={0},string={1},datetime={2}/",10,/"Vivid/",DateTime.Now)");
Console.WriteLine(String.Format("->int={0},string={1},datetime={2}",10,"Vivid",DateTime.Now));
Console.WriteLine程序中有三个内嵌在文字字符串中的参数字符串,分别为{0}、{1}、{2},用来格式化输出的文字符串。格式字符串中的参数是以0为基础开始计算的。{0}参数代表在跟随在结尾双引号之后的下一个自变量就是参数值出现的位置,也就是说[10]这个参数,在程序执行后,将会取代{0}所在的位置输出。依此类推,{1},代表第二个参数……。
程序中叫用String.Format方法分别将int型别的数值10、[Vivid]字符串,以及透过DateTim.Now属性取得的系统目前时间转换成字符串输出,执行的结果: String.Format("int={0},string={1},datetime={2}",10,"Vivid",DateTime.Now)
->int=10,string=Vivid,datetime=2005/9/16 下午 02:26:29
若想要进一步格式化时间的显示,可以在参数字符串后以下面的语法义输出的格式: {参数索引值:参数格式}如下面的程序代码,将日期的格式设定为yyyy-MM-dd: Console.WriteLine("String.Format(/"Now ={0:yyyy-MM-dd}/",DateTime.Now)");
Console.WriteLine(String.Format("->Now ={0:yyyy-MM-dd}",DateTime.Now));
这段程序输出的结果为: String.Format("Now ={0:yyyy-MM-dd}",DateTime.Now)
->Now =2005-09-06
注意,执行结果会依据你计算机控制台的日期设定而有所不同。格化字符串输出常用的参数:
[align=center]
格式化字符
[/b]
说明
[/b]
d显示短日期格式
D显示长日期格式
t显示短时间格式
T显示长时间格式
f显示长日期和短时间组合的格式,以空白分隔
F显示长日期和长时间组合的格式
g显示短日期和短时间组合的格式,以空白分隔
G显示短日期和长时间组合的格式,以空白分隔
M或m显示月份
Y或y显示年份
[/align]
若要以长日期格式显示,可以使用D格式化字符: Console.WriteLine("String.Format(/"Now = {0:D}/",DateTime.Now)");
Console.WriteLine(String.Format("->Now = {0:D}",DateTime.Now));
这段程序执行的结果为,注意,执行结果会依据计算机的日期设定而有所不同: String.Format("Now = {0:D}",DateTime.Now)
->Now = 2005年9月16日
下面的程序片段展示将数值格式化下成小数以后两位,整数为6位数,不足补0:
Console.WriteLine("String.Format(/"My Number={0:000000.00}/",1000.00)");
Console.WriteLine(String.Format("->My Number={0:000000.00}",1000.00));
这段程序输出的结果为: String.Format("My Number = {0:000000.00}",1000.00)
->My Number = 001000.00
注意,执行结果会依据计算机的设定而有所不同,若数之的数值不补0,可以将格式化字符[0]改用[#]号取代,其余相关的数值常用格式化字符见下表:[align=center]
数值格式化字符
[/b]
说明
[/b]
C与c货币格式
D与d科学符号格式
F与f符点数
G与g通用的数值格式
N与n数值格式
R与r双向格式,确保数值换成字符串后,再转换成数值能得到与转换前相同的值
X与x十六进制表示
[/align]Compare方法若要比较两个字符串的大小,可以使用String类别的Compare方法。举例来说,范例中使用: Console.WriteLine("->String.Compare(/"Vivid/",/"VIVID/",false)={0}",String.Compare("Vivid","VIVID",false));
程序中Compare方法传入三个参数:第一个参数代表要比较的第一个字符串;第二个参数是要比较的第二个字符串;第三个参数代表字符串比较时要将大小写视为相同或不同。若为true,代表忽略大小写;false代表不忽略大小写。[align=center]
回传值代表含意
小于0的值第一个字符串小于第二个字符串
0两个字符串相等
大于0第一个字符串大于第二个字符串
[/align]

IndexOf与LastIndexOf方法
如果想要搜索字符串是否包含特定的字符,可以使用IndexOf方法。这个方法将会回伟特定字符的索引值,如想要找寻[H/ello,V/ivid ]字符串中,第一次出现[,]符号的索引可以使用: Console.WriteLine("string s=/"H/ello,V/ivid /";");
string s = "H/ello,V/ivid ";
Console.WriteLine("->s.IndexOf(/",/") = {0}",s.IndexOf(","));
得到结果为: string s = "H/ello,V/ivid ";
->s.IndexOf(",") = 6
若找不到特定的字符,将回传-1;
若欲寻找的字符在字符串中重复出现多次,可以使用LastIndexOf方法找出最后一次出现的索引值,如欲找出[H/ello,V/ivid ]字符串最后一次出现[/]符号的索引值可以使用: Console.WriteLine("->s.LastIndexOf(/"//") = {0}",s.LastIndexOf("/"));
得到的结果为: ->s.LastIndexOf("/") = 8

Replace方法Replace方法可以用来将某一个Unicode字符取代成另一个unicode字符。查看上面代码的结果。
Substring方法你可以使用Substring萃取字符串部分数据。如想要萃取[H/ello,V/ivid ]字符串中的[llo,]4个这元,可以使用: Console.WriteLine("->s.Substring(3,4)= {0}",s.Substring(3,4));

[/b]ToUpper[/b]与[/b]ToLower[/b]方法
[/b]
ToUpper方法可以转字符串的内容改成大写;而ToLower则用来将字符全部改成小写。
Split方法如果想要以[,]区隔,分别萃取出[Miles]、[vivid]、[Cherry]字符串然后将这三个字符串放到一个一维数组中,可以使用String类别的Split方法。举例来说,范例中的程序代码片段叫用Split方法将字符串s,[H,ello,V,ivid ]按逗号切割后,分别放到string型别的数组中: Console.WriteLine("string[] sa = s.Split(new char[] {','});");
string[] sa = s.Split(new char[] {','});
int nIndex = 0;
Console.WriteLine("foreach(string o in sa)");
foreach (string o in sa)
{
Console.WriteLine("->{0} = {1}",nIndex++,o);
}
Split方法可以传入一个char型别的数组,你可以在这个数组指明切割字符串的Unicode办识字符,范例为[,]号,你也可以使用不同的符号。程序执行后,数组的第一个元素内容将为[H],第二个元素为[ELLO],依此类推,程序执行的结果为: String[] sa = s.Split(new char[]{', '});
foreach (string o in sa)
->0 = H
->1 = ELLO
->2 = V
->3 = IVID
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: