String与StringBuilder
C#支持两种字符串:规则字符串和逐字字符串。
我先前看到@+“”这种结构处理字符串的时候,也就只是记下怎么用而已,其实这就是标准的逐字字符串,而且分隔符之间的字符逐字解释,唯一例外的就是引号。在逐字字符串中字符串不处理简单转义序列及十六进制和Unicode转义序列,而且可以跨多行。例如:
static void Main(string[] args)
{
string s = "这个专业\"老师\"太垃圾了!";
string s1 = @"这个专业""老师""太垃圾了!";
Console.WriteLine("s-{0}",s1);
Console.WriteLine("s1-{0}",s1);
string s2 = @"这个专业
老师
太垃圾了!";
Console.WriteLine("s2-{0}",s2);
Console.ReadKey();
String和StringBuilder的不同之处,可以概括为StringBuilder是可变字符序列的类似String类,String我们都知道它是新值新引用,必须分配新的内存。这样当我们多次更改或者连接许多字符串的时候可以使用StringBuilder可以提高性能,先分别演示一下String和StringBuilder的一些有代表性的方法和属性的用法:
using System;
namespace tString
{
class test
{
static void Main()
{
//连接字符串演示
string s1 = "Today is ";
string s2 = "Tuesday!";
string s = s1 + s2;
Console.WriteLine(s);
Console.WriteLine("等效于: string.Concat(s1,s2) s={0}", string.Concat(s1, s2));
//逐字访问字符串演示
Console.WriteLine("逐字访问字符串演示\n法1:");
foreach (char c in s) //法1
{
Console.Write(c + " ");
}
Console.WriteLine("\n法2");
char[] str = s.ToCharArray();//将s中的字符复制到unicode字符数组中
foreach (char r in str)
{
Console.Write(r + " ");
}
Console.WriteLine("\n法3");
for (int i = 0; i < s.Length; i++)//索引起始为0,二不是Unicode字符的位置
{
Console.Write(s[i]+" ");
}
s = s1 + s2;
//测试字符的搜索方法
Console.WriteLine("测试字符的搜索方法");
Console.WriteLine("与\"Today\"匹配的第一个字符的索引为{0}", s.IndexOf("Today"));
string target = "ido";//这里注意一下,我也是做实验才发现的,逐字符与target对比
char[] anyOf = target.ToCharArray();
int start =0;
int at;
at = s.IndexOfAny(anyOf, start);
if (at > -1)
Console.WriteLine("s中与\"id\"中匹配的第一个字符的索引为{0}",at);
else
Console.WriteLine("(not found)");
char[] n = { 'i','s'};
//例如:
char[] ar = { 'i','s'};
Console.WriteLine("s中与\"is\"中匹配的第一个字符的索引为{0}", s.IndexOfAny(ar));
Console.WriteLine("索引0-5对应的子字符串为{0}", s.Substring(0, 5));
//修改字符串
Console.WriteLine("修改字符串测试");
//Insert
Console.WriteLine("Insert测试");
Console.WriteLine(s.Insert(17, " What a nice weather!"));
//PadLeft
Console.WriteLine("PadLeft测试");
s = s.PadLeft(s.Length + 8, '♀');
Console.WriteLine(s);
//PadRight
Console.WriteLine("PadRight测试");
s = s.PadRight(s.Length + 8, '♂');
Console.WriteLine(s);
Console.ReadKey();
}
}
}
效果图:由于要限电了只能演示String类了,可以自己研究下StrigBuilder类,和String差不多,几个典型的方法如Append,AppendFormat,ToString.