}
}
I <==输出
like
this
food
are
you
二、颠倒字符串次序
classmyreverse
{
staticvoidMain(string[]args)
{
stringmystring="你们好";
char[]mychars=mystring.ToCharArray();
Array.Reverse(mychars);
Console.WriteLine(mystring);
Console.WriteLine(mychars);
}
}
任何继承于Array的类都能利用Reverse()方法为数组中的元素重新排序。
三、字符串的插入、删除和替换
示例文件test.txt为字符串的来源。
下面代码以Unicode格式读取文本。
确保文件保存为读取时的格式。
例如记事本允许将代码保存为Unicode:
aaaaaaaa,bbbbbbbb,cccccc
dddddddd,eeeeeeee,ffffff
gggggggg,hhhhhhhh,iiiiii
jjjjjjjj,kkkkkkkk,llllll
下面代码加载数据并处理数据的测试工具。
测试结果发送给控制台。
classmyprocessfile
{
staticvoidMain(string[]args)
{
conststringmyName="test.txt";
StreamreadLine;
TextWirterwriteLine;
StringBuildersb;
readLine=File.OpenRead(myName);
WriteLine=Console.Out;
StreamReaderreadLineSReader=newStreamReader(readLine,Encoding.Unicode);
readLineSReader.BaseStream.Seek(0,SeekOrigin.Begin);
while(readLineSReader.Peek()>-1)
{
sb=newStringBuilder(readLineSReader.ReadLine());
//插入字符串操作语句如:
sb.Append(",123");
Console.WriteLine(sb.ToString());
}
}
}
在结尾添加一列内容:
//displaysaaaaaaaa,bbbbbbbb,cccccc,xxxxx
//......
sb.Append(",xxxxx");
第一列可以使用下面的代码删除:
//displaysbbbbbbbb,cccccc
//......
sb.Remove(0,sb.ToString().IndexOf(',')+1);
替换分隔符:
//aaaaaaaa+bbbbbbbb+cccccc
sb.Replace(',','+');
添加行号(lineNumber已经在前面某处声明过为前提):
sb.Insert(0,lineNumber.ToString("000"));
lineNumber++;
//displays
//000aaaaaaaa,bbbbbbbb,cccccc
//001dddddddd,eeeeeeee,ffffff
//002gggggggg,hhhhhhhh,iiiiii
//003jjjjjjjj,kkkkkkkk,llllll
字符串操作
1、从字符串中提取子串
StringBuilder类没有支持子串的方法,因此必须用String类来提取。
stringmystring="Mynameisynn.";
//Displays"nameisynn."
Console.WriteLine(mystring.Substring(3));
//Displays"ynn"
Console.WriteLine(mystring.Substring(11,3));
2、比较字符串
String类有四种方法:
Compare()、CompareTo()、CompareOrdinal()、Equals()。
Compare()方法是CompareTo()方法的静态版本。
只要使用“=”运算符,就会调用Equals()方法,的以Equals()方法与“=”是等价的。
CompareOrdinal()方法对两个字符串比较不考本地语言与文件。
示例:
intresult;
boolbresult;
s1="aaaa";
s2="bbbb";
//Compare()method
//result值为“0”表示等,小于零表示s1s2
result=String.Compare(s1,s2);
result=s1.CompareTo(s2);
result=String.CompareOrdinal(s1,s2);
bresult=s1.Equals(s2);
bresult=String.Equals(s1,s2);
一个例外情况是,两个字符串都是内置的,并相等,静态方法要快得多。
3、字符串格式化
3.1格式化数字
格式字符 说明和关联属性
c、C 货币格式。
d、D 十进制格式。
e、E 科学计数(指数)格式。
f、F 固定点格式。
g、G 常规格式。
n、N 数字格式。
r、R 往返格式,确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。
x、X 十六进制格式。
doubleval=Math.PI;
Console.WriteLine(val.ToString()); //displays3.14159265358979
Console.WriteLine(val.ToString("E"));//displays3.141593E+000
Console.WriteLine(val.ToString("F3");//displays3.142
intval=65535;
Console.WriteLine(val.ToString("x")); //displaysffff
Console.WriteLine(val.ToString("X")); //displaysFFFF
Singleval=0.123F;
Console.WriteLine(val.ToString("p")); //displays12.30%
Console.WriteLine(val.ToString("p1")); //displays12.3%
默认格式化会在数字和百分号之间放入一个空格。
定制方法如下:
其中NumberFormatInfo类是System.Globalization命名空间的一个成员,因此该命名空间必须导入到程序中。
Singleval=0.123F;
objectmyobj=NumberFormatInfo.CurrentInfo.Clone()asNumberFormatInfo;
NumberFormatInfomyformat=myobjasNumberFormatInfo;
myformat.PercentPositivePattern=1;
Console.WriteLine(val.ToString("p",myformat));//displays12.30%;
Console.WriteLine(val.ToString("p1",myformat));//displays12.3%;
格式化具有很大的灵活性。
下面的例子演示一个没有意义的货币结构:
doubleval=1234567.89;
int[]groupsize={2,1,3};
objectmyobj=NumberFormatInfo.CurrentInfo.Clone();
NumberFormatInfomycurrency=myobjasNumberFormatInfo;
mycurrency.CurrencySymbol="#";//符号
mycurrency.CurrencyDecimalSeparator=":
";//小数点
mycurrency.CurrencyGroupSeparator="_"; //分隔符
mycurrency.CurrencyGroupSizes=groupsize;
//输出 #1_234_5_67:
89
Console.WriteLine(val.ToString("C",mycurrency));
3.2格式化日期
输出形式取决于用户计算机的文化设置。
usingSystem;
usingSystem.Globalization;
publicclassMainClass
{
publicstaticvoidMain(string[]args)
{
DateTimedt=DateTime.Now;
String[]format={"d","D","f","F","g","G","m","r","s","t","T","u","U","y","dddd,MMMMddyyyy","ddd,MMMd\"'\"yy","dddd,MMMMdd","M/yy","dd-MM-yy",};
Stringdate;
for(inti=0;i {
date=dt.ToString(format[i],DateTimeFormatInfo.InvariantInfo);
Console.WriteLine(String.Concat(format[i],":
",date));
}
}
}
d:
07/11/2004 <=======输出
D:
Sunday,11July2004
f:
Sunday,11July200410:
52
F:
Sunday,11July200410:
52:
36
g:
07/11/200410:
52
G:
07/11/200410:
52:
36
m:
July11
r:
Sun,11Jul200410:
52:
36GMT
s:
2004-07-11T10:
52:
36
t:
10:
52
T:
10:
52:
36
u:
2004-07-1110:
52:
36Z
U:
Sunday,11July200402:
52:
36
y:
2004July
dddd,MMMMddyyyy:
Sunday,July112004
ddd,MMMd"'"yy:
Sun,Jul11'04
dddd,MMMMdd:
Sunday,July11
M/yy:
7/04
dd-MM-yy:
11-07-04
3.3格式化枚举
enumclassmen
{
ynn=1,
yly=2,
css=3,
C++=4
}
获取枚举字符串信息如下:
classmenmyclassmen=classmen.yly;
Console.WriteLine(myclassmen.ToString()); //displaysyly
Console.WriteLine(myclassmen.ToString("d"));//displays2
从系统枚举中获取文本人信息如下:
DayOfWeekday=DayOfWeek.Friday;
//displays"DayisFriday"
Console.WriteLine(String.Format("Dayis{0:
G}",day));
格式化字符串“G”把枚举显示为一个字符串。
StringBuilder类学习笔记
String类的不可改变性使它更像一个值类型而不是一个引用类型。
其副作用是每次执行字符操作时,都会创建一个新的String对象。
StringBuilder类解决了对字符串进行重复修改的过程中创建大量对象的问题。
StringBuilder类的一些属性与方法
Length 属性并不是只读的。
StringBuildersb=newStringBuilder("Ilivethelanguage");
Console.WriteLine(sb.ToString());
sb.Length=6;
//Displays"Ilive"
Console.WriteLine(sb.ToString());
Capacity 属性
描述:
当前为实例分配的字符数量。
默认容量是16,如果将一个字符串作为参数提供给构造函数,容量以最接近2的幂的值。
MaxCapacity 属性
描述:
这个实例中可以被分配的字符最大数量。
Append( ) 方法
描述:
追加给定值的字符串表示。
StringBuildersb=newStringBuilder();
Console.WriteLine(sb.Capacity+"\t"+sb.Length);
sb.Append('a',17)
Console.WriteLine(sb.Capacity+"\t"+sb.Length);
16 0<==输出
32 17
EnsureCapacity(Intcapacity) 方法
描述:
如果当前容量小于指定容量,内存分配会增加内存空间以达到指定容量。
Replace(Charoldchar,Charnewchar) 方法
描述:
用newchar替换oldchar。
Replace(Stringoldstring,Stringnewstring) 方法
描述:
用newstring替换oldstring。
Replace(Charoldchar,Charnewchar,Int startpos,Intcount) 方法
描述:
从startpos到count-1之间用newchar替换oldchar。
Replace(Stringoldstring,Stringnewstring,Intstartpos,Intcount) 方法
描述:
从startpos到count-1之间用newstring替换oldstring。
ToString() 方法
StringBuildersb=newStringBuilder("Ilivethisgame");
Strings1=sb.ToString( ); //Displays"Ilivethisgame"
Strings2=sb.ToString(3,4); //Displays"live"
在这里第二个ToString()方法调用了String类的Substring()方法
publicStringToString(intstartIndex,intlength)
{
returnm_StringValue.Substring(startIndex,length);
}
String类学习笔记
一、String类的常用公共成员
Compare(Strings1,Strings2) 静态方法
功能:
区分大小写比较。
Compare(Strings1,Strings2,BoolignoreCase) 静态方法
功能:
ignoreCase为True,不区分大小写比较。
CompareTo(Strings) 实例方法
功能:
对给定字符串与实例字符串执行一次区分大小写与文化信息比较。
Copy(Strings) 静态方法
功能:
返回一个与给定字符串同值的新的字符串。
CopyTo(IntsurceIndex,char[]destination,IntdestIndex,Intcount)
实例方法功能:
此实例中的指定位置复制到Unicode字符数组中的指定位置。
参数:
sourceIndex:
此实例中的字符位置。
destination:
Unicode字符的数组。
destIndex:
destination中的数组元素。
count:
此实例中要复制到destination的字符数。
例程:
usingSystem;
publicclassCopyToTest{
publicstaticvoidMain(){
stringstrSource="changed";
char[]destination={'T','h','e','','i','n','i','t','i','a','l','','a','r','r','a','y'};
Console.WriteLine(destination);
strSource.CopyTo(0,destination,4,strSource.Length);
Console.WriteLine(destination);
strSource="Adifferentstring";
strSource.CopyTo(2,destination,3,9);
Console.WriteLine(destination); }
}
输出:
Theinitialarray
Thechangedarray
Thedifferentarray
EndsWith(Strings)
功能:
如果实例字符串是以给定的字符串结束,就返回True。
Equals(Strings)
功能:
如果实例字符串与给定的对象具有相同的值,就返回True。
Format(IFormatProviderprovider,Stringformat,ParamArrayargs)
功能:
format的一个副本,其中格式项已替换为args中相应Object实例的String等效项。
参数
provider:
一个IFormatProvider,它提供区域性特定的格式设置信息。
format:
包含零个或多个格式项。
args:
包含零个或多个要格式化的对象的Object数组。
例如:
stringmyName="Fred";
String.Format("Name={0},hours={1:
hh}",myName,DateTime.Now);
固定文本是“Name=”和“,hours=”,格式项是“{0}”和“{1:
hh}”,值为myName和DateTime.Now。
Replace(Stringoldstring,Stringnewstring)
功能:
在实例字符串中用newstring替换所有oldstring。
Split(char[]separator,intcount)
参数
separator:
分隔此实例中子字符串的Unicode字符数组、不包含分隔符的空数组或空引用。
count:
要返回的最大数组元素数。
例如:
stringdelimStr=",.:
";
char[]delimiter=delimStr.ToCharArray();
stringwords="onetwo,three:
four.";
string[]split=null;
split=words.Split(delimiter,4);
foreach(stringsinsplit)
{
Console.WriteLine("-{0}-",s);
}
one <==输出
two
three
four.
SubString(IntstartPos,Intlength)
功能:
从指定位置开始返回一个指定长度的子串。
ToString() 功能:
返回一个对实例字符的引用。
ToString(IFormatProviderformat)
功能:
返回一个对实例字符串的引用。
正则表达式学习笔记
(1)
一、System.Text.RegularExpression命名空间
1、 Regex类可以用来创建正则表达式,还提供了许多方法。
如:
Regex.Replace(stringinput,Stringpattern,stringreplacement);
-------RegexOption枚举
IgnoreCase 忽略大小写。
默认情况区分大小写
RightToLeft 从右到左查找输入字符串。
None 不设定标志。
MiltiLine 指定^与$可以匹配行的开