string 存在System命名空间中,其创建的字符串是不可变的
首先,创建字符串 string str = “www.sola.com”;
这样就直接创建了字符串 str,之后,对字符串进行一些属性的介绍
Length属性是返回当前字符串的个数
string str = " www.sola.com";
int sLen = str.Length;
Console.Write(sLen);
如上,输出的为 www.sola.com 的个数,13
字符串比较可以使用" == " 或者使用 CompareTo() 函数
if (str == "www.solar.com")
{
Console.Write("True");
}
else
{
Console.Write("False");
}
这是用 " == " 来进行比较的,当相等时,输出 True, 不想等,输出 False。
使用 CompareTo() 函数比较的话,如果相等,会返回 0, 若不想等,则返回 一个非 0 的值,用法如下
int nRet = str.CompareTo("www.solar.com");
Console.Write(nRet);
这时,nRet 返回值为 -1
在讲述字符串连接的时候,我需要声明一下,string 字符串是不可变的,也就是无法进行修改,所以当我们在更改string字符串的时候,往往都会重新创建一个string字符串然后拼接在一起组成新的字符串。
例如下:
str = "http://" + str;
Console.Write(str);
这样会生成新的字符串str 值为 “http://www.sola.com”。而其中的原理如下图:
我们创建一个str字符串时候,str 会指向堆中的内存。而当我们给新的字符串拼接的时候,会在堆内存中重新创建一个,然后将str重新指向新的字符串。
而老的字符串因为在堆中没有任何人的使用,则会被GC回收,这就是字符串重新拼接的原理
字符串的索引是从 0 开始的,所以我们可以通过索引值来获取字符串的每一个字符,例如,我们要找到第一个 '.‘字符,第一个’.'字符的索引是 3,所以就可以这样使用。
char c = str[3];
Console.Write(c);
Replace() 用一个字符或字符串替换给定字符串中的给定字符或字符串
例如,若把字符串中的www 替换成 sss
str = str.Replace("www", "sss");
Console.Write(str);
输出为:sss.sola.com
当然也可以字符进行处理,我们想把字符串中的 ‘.’ 替换成 ‘_’
str = str.Replace('.', '_');
Console.Write(str);
输出为:www_sola_com
Split() 在出现给定字符的地方,将字符串拆分为字符数组
例如,我们将str字符串按照 ‘.’ 来拆分
string[] strArray = str.Split('.');
foreach(var temp in strArray)
{
Console.WriteLine(temp);
}
输出的结果就是
www
sola
com
注意的是Split()返回的值为字符串数组,所以要用字符串数组来接收
Substring() 是截取给定字符串,有两个参数,第一个是从第几个索引开始,第二个是截取的长度,不填默认之后的所有
例如:截取第三个之后的所有
str = str.Substring(3);
Console.Write(str);
输出的结果就是:.sola.com
例如: 从第四个开始,截取后四个字符串
str = str.Substring(4, 4);
Console.Write(str);
输出的结果就是:sola
ToUpper() 把字符串所有的小写转换为大写
ToLower() 把字符串所有的大写转换成小写
str = str.ToUpper();
Console.Write(str);
str = str.ToLower();
Console.WriteLine();
Console.Write(str);
输出:
WWW.SOLA.COM
www.sola.com
Trim() 删除首尾空白字符
例如我们改写str = " www.sola.com ";
str = " www.sola.com";
str = str.Trim();
Console.Write(str);
输出:www.sola.com
Concat是string类中的静态方法,是将两个字符串合并起来
str = string.Concat(str, "-sss", "-www");
Console.Write(str);
输出:www.sola.com-sss-www
Concat() 的参数可以有无数个,目的就是将参数顺序的合并在一起,组成新的字符串
Format() 是string类中静态方法,是格式化输出。
如下:
str = string.Format("www.{0}.com", 123);
Console.Write(str);
输出:www.123.com
IndexOf() 通过给定的字符或字符串,进行查找,返回第一个符合条件的索引值,若不存在,则返回-1
int index = str.IndexOf("www");
Console.WriteLine(index);
index = str.IndexOf("wsw");
Console.WriteLine(index);
输出结果为:
0
-1
Insert() 把一个字符串插入到另一个字符串中指定的索引处,返回新的字符串
str = str.Insert(2, "sef");
Console.Write(str);
输出的结果为:
wwsefw.123.com
string字符串是创建了一个不可变的数据类型,一旦但字符串进行初始化,该字符串就不能改变内容,若想改变只能创建一个新的字符串把旧的内容赋值到新的字符串中,然后返回新的字符串的引用,若重复修改给定的字符串,效率会很低。
StringBuilder 类是位于System.Text命名空间下的。是可变的数据类型
StringBuilder sb = new StringBuilder("www.sola.com");
StringBuilder sb1 = new StringBuilder(100);
StringBuilder sb2 = new StringBuilder("www.sola.com", 100);
这三种都是创建StringBuilder对象
第一个是直接创建,然后直接将 "www.sola.com"对其进行赋值,大小为"www.sola.com"大小
第二个是创建了 100字节内存的一个对象,并没有对其赋值,待后续赋值
第三个是创建了100字节内存的一个对象,并用"www.sola.com"进行赋值。
这三种都是创建对象时候占用内存。当在处理的过程中,发现使用内存不够了, StringBuilder会自动的添加一个新的大小为其原来 内存2倍内存
Append() 函数是对当前字符串追加一个字符或字符串
StringBuilder sb = new StringBuilder("www.sola.com");
sb.Append("-wwwsola");
Console.Write(sb);
输出结果为:www.sola.com-wwwsola
Insert() 在制定位置上添加一个字符串或字符
例如:在第二个位置上插入ssss
sb.Insert(1, "ssss");
Console.Write(sb);
输出的结果为:wssssww.sola.com
Remove() 在指定位置开始删除给定个数的字符
例如:删除 sola 四个字节
sb.Remove(4, 4);
Console.Write(sb);
输出的结果为:www…com
Replace() 在当前字符串中,用给定的字符或字符串全部替换成另一个字符或字符串
例如:将所有的www 替换成 sss
sb.Replace("www", "sss");
Console.Write(sb);
输出的结果为:sss.sola.com
ToString() 将当前StringBuilder中储存的字符串提取成一个不可变的字符串
返回值要用 string 接受
例如:
string str = sb.ToString();
Console.Write(str);
输出结果为:www.sola.com
StringBuilder是可变的,大小会根据字符串内容来2倍增加,在多线程中,StringBuilder类行的字符串是不安全的。