一、string
- C#中单个字符用单引号包含就是char类型,('a'),单引号中放且只能放一个字符,不能为''。
- 单个字符也可以表示为字符串,还可以有长度为0的字符串""。
- 使用字符串中的Length属性来获得字符串中的字符个数。
- string可以看做是char的只读数组。char c = s[1];。例子:遍历输出string中的每个元素(正反序)。
- C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。可以理解为常量。
- 如果要对char进行修改,那么就必须创建一个新的字符串,用ToCharArray()方法得到字符串的char数组,对数组进行修改。
string str = " abcdefg ";
char[] c = str.ToCharArray();
c[2] = '.';
Console.WriteLine("ToCharArray得到字符数组,遍历字符数组:");
for (int m = 0; m < c.Length; m++)
{
Console.WriteLine(c[m]);
}
Console.WriteLine("原始字符串");
Console.WriteLine(str);
结果为:
- 注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。
string str = " ABcdefg ";
Console.WriteLine("将字符全小写:" + str.ToLower());
结果为:
2.ToUpper():得到字符串的大写形式;
string str = " ABcdefg ";
string UPPER = str.ToUpper();
Console.WriteLine("将字符全大写:" + UPPER);
Console.WriteLine("原始字符串:" + str);
结果为:
3.Trim()去掉字符串两端的空隔。
string str = " ABcdefg ";
Console.WriteLine("去掉两端空格:" + str.Trim());
结果为:
去掉两端空格:ABcdefg
4.s1.Equals(s2, StringComparison.OrdinalIgnoreCase),两个字符串进行不区分大小写的比较。
string str = " ABcdefg ";
string str2 = " abcdefg ";
bool isEqual= str.Equals(str2, StringComparison.OrdinalIgnoreCase);
Console.WriteLine(isEqual);
结果为:true
5.Split(params char[] separator):将字符串按照指定的字符分割为字符串数组;
Split(char[] separator,StringSplitOptions options):将字符串按照指定的char分割符分割为字符
串数组(options 取RemoveEmptyEntries的时候移除结果中的空白字符串);
string s = "aa,bb,cc,,, d,e";
char[] a= { ','};
string[] ss = s.Split(a, StringSplitOptions.RemoveEmptyEntries);
foreach (var item in ss)
{
Console.WriteLine(item);
}
结果为:
Split(string[] separator, StringSplitOptions options):将字符串按照指定的string分割符分割为
字符串数组。
6.字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的
地方替换为newValue。例子:名字替换。
string str = "ABcdefg";
Console.WriteLine(str.Replace('A', 'a')); //aBcdefg
Console.WriteLine(str.Replace("AB", "ab")); //abcdefg
7.取子字符串:string Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串
string Substring(int startIndex, int length):取从位置startIndex开始长度为length的子字符
串,如果子字符串的长度不足length则报错。
string str = "ABcdefg";
Console.WriteLine(str.Substring(4)); //efg
Console.WriteLine(str.Substring(4,2)); //ef 第二个参数不能超出范围,否则会报异常
8.str.CompareTo(str2):将此实例与指定的 String 对象进行比较,并指示此实例在排序顺序中是位
于指定的字符串之前、之后还是与其出现在同一位置。0<1<2<..
string str = " ABcdefg ";
string str2 = " abcdefg ";
int num= str.CompareTo(str2);//str>str2:1;相等0,小于为-1
Console.WriteLine(num);
结果为:1
9.bool Contains(string value)判断字符串中是否含有子串value
string str = "ABcdefg";
string s = "AB";
Console.WriteLine(str.Contains(s));
结果为:true
10.bool StartsWith(string value)判断字符串是否以子串value开始;
string str = "ABcdefg";
string s = "AB";
Console.WriteLine(str.StartsWith(s));
结果为:true
11.bool EndsWith (string value)判断字符串是否以子串value结束;
12.int IndexOf(string value) 取子串value第一次出现的位置。
string str = "ABcdefg";
string s = "AB";
Console.WriteLine(str.IndexOf(s));
结果为:0
13.IsNullOrEmpty(string) 字符串判断为空或长度为0 的字符串(null和””)//String中的静态变量
string str = "ABcdefg";
Console.WriteLine(string.IsNullOrEmpty(s));
结果为:false
二、StringBuilder
- StringBuilder类为我们提供了很多对字符串进行修改的方法,方便我们对同一个字符串对象进行操作。
- 每次使用String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。
- 构造函数:
StringBuilder(String, Int32), 用指定的字符串和容量初始化 StringBuilder 类的新实例。
- 属性:
Capacity 获取或设置可包含在当前实例所分配的内存中的最大字符数。
Length 获取或设置当前 StringBuilder 对象的长度。
- 方法:
Append(String) 将指定字符串追加到当前 StringBuilder 的结尾。
Insert(Int32, String) 将字符串或对象插入到当前 StringBuilder 对象的指定索引处。
Remove(Int32, Int32) 从当前StringBuilder 中移除指定数量的字符,参数为:(位置,长度)
Replace(String, String)
将当前字符串中出现的所有指定字符串的替换为其他指定字符串
StringBuilder sb = new StringBuilder("abcdefg");
Console.WriteLine(sb.Capacity);
Console.WriteLine(sb.Length);
sb.Append("+ABCDEFG");
Console.WriteLine("追加:"+sb);
sb.Remove(5, 5);
Console.WriteLine("删除:"+sb);
sb.Insert(5, "...");
Console.WriteLine("插入:"+sb);
sb.Replace("abc", "***");
Console.WriteLine("修改:"+sb);
Console.WriteLine(sb.MaxCapacity);
结果为:
16
7
追加:abcdefg+ABCDEFG
删除:abcdeCDEFG
插入:abcde...CDEFG
修改:***de...CDEFG
2147483647