String是任何应用程序使用最多的类型之一。
一个String代表一个不可变的顺序字符集。String真接派生自Object,所以String是一个引用类型。
String str=new String(“大家好”);//错误的写法
String是直接赋值来构造的。
 
String一旦定义,就是不可变的,如果字符串发生变化,就会生成新的字符串。
字符串不变允许在一个字符串上执行各种操作,而不实际改变字符串。
如果字符串相同,可能共用一个字符串,这叫字符串留用。
string函数有:
 
名称
说明
比较两个指定的 String 对象。
Concat
连接 String 的一个或多个实例,或 Object 的一个或多个实例的值的 String 表示形式。
Contains
返回一个值,该值指示指定的 String 对象是否出现在此字符串中。
Copy
创建一个与指定的 String 具有相同值的 String 的新实例。
CopyTo
将指定数目的字符从此实例中的指定位置复制到 Unicode 字符数组中的指定位置。
EndsWith
 确定 String 的实例的末尾是否与指定的字符串匹配。
Format
将指定的 String 中的每个格式项替换为相应对象的值的文本等效项。
IndexOf
报告 String 或一个或多个字符在此字符串中的第一个匹配项的索引。
IndexOfAny
报告指定 Unicode 字符数组中的任意字符在此实例中第一个匹配项的索引。
Insert
在此实例中的指定索引位置插入一个指定的 String 实例。
Intern
检索系统对指定 String 的引用。
IsInterned
检索对指定 String 的引用。
IsNullOrEmpty
指示指定的 String 对象是 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing还是 Empty 字符串。
Join
在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串。
LastIndexOf
报告指定的 Unicode 字符或 String 在此实例中的最后一个匹配项的索引位置。
LastIndexOfAny
报告在 Unicode 数组中指定的一个或多个字符在此实例中的最后一个匹配项的索引位置。
 
名称
说明
MemberwiseClone
创建当前 Object 的浅表副本。
PadLeft
已右对齐此实例中的字符,在左边用空格或指定的 Unicode 字符填充以达到指定的总长度。
PadRight
左对齐此字符串中的字符,在右边用空格或指定的 Unicode 字符填充以达到指定的总长度。
Remove
从此实例中删除指定个数的字符。
Replace
将此实例中的指定 Unicode 字符或 String 的所有匹配项替换为其他指定的 Unicode 字符或 String
Split
返回的字符串数组包含此实例中的子字符串(由指定字符串或 Unicode 字符数组的元素分隔)。
StartsWith
确定 String 实例的开头是否与指定的字符串匹配。
Substring
从此实例检索子字符串。
ToCharArray
将此实例中的字符复制到 Unicode 字符数组。
ToLower
返回此 String 转换为小写形式的副本。
ToLowerInvariant
返回此 String 对象的转换为小写形式的副本,返回时使用固定区域性的大小写规则。
ToUpper
返回此 String 转换为大写形式的副本。
ToUpperInvariant
返回此 String 对象的转换为大写形式的副本,返回时使用固定区域性的大小写规则。
Trim
已重载。 从当前 String 对象移除一组指定字符的所有前导匹配项和尾部匹配项。
TrimEnd
从当前 String 对象移除数组中指定的一组字符的所有尾部匹配项。
TrimStart
从当前 String 对象移除数组中指定的一组字符的所有前导匹配项。
String和StringBuilder 比较
lConcat 和 AppendFormat 方法都将新数据串连到一个现有的 String 或 StringBuilder 对象。String 对象串联操作总是用现有字符串和新数据创建新的对象。StringBuilder 对象维护一个缓冲区,以便容纳新数据的串联。如果有足够的空间,新数据将被追加到缓冲区的末尾;否则,将分配一个新的、更大的缓冲区,原始缓冲区中的数据被复制到新的缓冲区,然后将新数据追加到新的缓冲区。
lString 或 StringBuilder 对象的串联操作的性能取决于内存分配的发生频率。String 串联操作每次都分配内存,而 StringBuilder 串联操作仅当 StringBuilder 对象缓冲区太小而无法容纳新数据时才分配内存。因此,如果串联固定数量的 String 对象,则 String 类更适合串联操作。这种情况下,编译器甚至会将各个串联操作组合到一个操作中。如果串联任意数量的字符串,则 StringBuilder 对象更适合串联操作;例如,某个循环对用户输入的任意数量的字符串进行串联。
StringBuilder 函数有:
 
Append
已重载。 在此实例的结尾追加指定对象的字符串表示形式。
AppendFormat
已重载。 向此实例追加包含零个或更多格式规范的设置了格式的字符串。每个格式规范由相应对象参数的字符串表示形式替换。
AppendLine
已重载。 将默认的行终止符(或指定字符串的副本和默认的行终止符)追加到此实例的末尾。
CopyTo
将此实例的指定段中的字符复制到目标 Char 数组的指定段中。
EnsureCapacity
确保 StringBuilder 的此实例的容量至少是指定值。
Insert
已重载。 将指定对象的字符串表示形式插入到此实例中的指定字符位置。
MemberwiseClone
创建当前 Object 的浅表副本。 (继承自 Object。)
Remove
将指定范围的字符从此实例中移除。
Replace
已重载。 将此实例中所有的指定字符或字符串替换为其他的指定字符或字符串。
ToString
已重载。 StringBuilder 的值转换为 String
 
Capacity
获取或设置可包含在当前实例所分配的内存中的最大字符数。
Chars this,索引器)
获取或设置此实例中指定字符位置处的字符。
Length
获取或设置当前 StringBuilder 对象的长度。
MaxCapacity
获取此实例的最大容量。
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace stringtype
{
    class Program
    {
        static void Main(string[] args)
        {
            //indexOf的使用
            string str = "1234567890";
            string str2 = "122344445";
            char[] b = { };
            Console.WriteLine(str.Split(b));
            Console.WriteLine(str.Insert(1, "4"));
            Console.WriteLine(str.IndexOf('0'));//查找0字符的位置
            Console.WriteLine(str.IndexOf("456"));//查找456字符串的位置
            Console.WriteLine(str.IndexOf('2', 5));//从第五个位置查2
            Console.WriteLine(str.IndexOf("2", 5));
            string str1 = "你好么啊啊";
            Console.WriteLine(str1.IndexOf("好", StringComparison.CurrentCulture));//国际化字符串
            Console.WriteLine(str1.IndexOf('好', 0, 2));//从0位置开始查找好的字符 2为指定的字符数量
            Console.WriteLine(str1.IndexOf("好", 0, 2));
            Console.WriteLine(str1.IndexOf("好", 2, StringComparison.CurrentCulture));
            Console.WriteLine(str1.IndexOf("好", 2, 3, StringComparison.CurrentCulture));
            Console.WriteLine(str.Clone());//复制字符串
            Console.WriteLine(str.CompareTo(str2));//比较str与str2是否相等相等为0不等为1
            Console.WriteLine(str.CompareTo("1234567890"));//比较str与str2是否相等相等为0不等为1比较的是他们的ASCII
            Console.WriteLine(str.Contains('1'));//比较str中是否包含字符1返回类型为bool
            Console.WriteLine(str.Contains("123456"));//比较str中是否包含字符串123456返回类型为bool
            char[] str3 = { '1', '2', '3', '0', 'a', 'b', 'c' };
            string f = "the";
            //char a='2';
            f.CopyTo(0, str3, 1, f.Length);
            Console.WriteLine(str3);
            Console.WriteLine(str.EndsWith("2"));
            Console.WriteLine(str.EndsWith(str2, false, null));
            Console.WriteLine(str.Equals("123"));
            Console.WriteLine(str3.GetEnumerator());
            Console.WriteLine(str.GetHashCode());
            Console.WriteLine(str.GetType());
            Console.WriteLine(str.GetTypeCode());
            Console.WriteLine(str.IndexOfAny(str3));
            Console.WriteLine(str.IsNormalized());
            Console.WriteLine(str.LastIndexOf('0'));
            Console.WriteLine(str.LastIndexOfAny(str3));
            Console.WriteLine(str.Length);
            Console.WriteLine(str.Normalize());
            // Console.WriteLine(str.Normalize());
            Console.WriteLine(str.PadLeft(11));
            Console.WriteLine(str.PadLeft(11, 'a'));
            Console.WriteLine(str.PadRight(11));
            Console.WriteLine(str.PadRight(11, 'a'));
            Console.WriteLine(str.Remove(2));
            Console.WriteLine(str.Remove(2, 3));
            Console.WriteLine(str.Replace('2', '0'));
            Console.WriteLine(str.StartsWith("2"));
            Console.WriteLine(str.Substring(1));
            Console.WriteLine(str.Substring(3, 2));
            Console.WriteLine(str.ToCharArray());
            Console.WriteLine(str.ToCharArray(2, 3));
            string str4 = "abcASDF";
            string[] str5 = { "abcgdhh", "4566" };
            Console.WriteLine(str4.ToLower());
            Console.WriteLine(str4.ToLowerInvariant());
            Console.WriteLine(str4.ToUpper());
            Console.WriteLine(str.Trim(str3));
            Console.WriteLine(str.TrimEnd(str3));
            Console.WriteLine(str.TrimStart(str3));
            Console.WriteLine(String.Intern(str4));
            Console.WriteLine(String.IsInterned(str4));
            Console.WriteLine(String.IsNullOrEmpty(""));
            Console.WriteLine(String.Join("=", str5));
            Console.WriteLine(String.ReferenceEquals(str4, str3));
            Console.WriteLine(str3.GetEnumerator());
            //StringBuilder中的方法
            StringBuilder a = new StringBuilder("this",123);
            char [] str8={'1','2','3','0','a','b','c'};
            Console.WriteLine( a.Append(true));
            Console.WriteLine(a.AppendFormat("0", "123456"));
            Console.WriteLine(a.AppendLine("4"));
            Console.WriteLine(a.Capacity);
            a.CopyTo(0,str8,0,4);
            Console.WriteLine(str8);
            Console.WriteLine(a.EnsureCapacity(10));
            Console.WriteLine(a.Equals("this"));
            Console.WriteLine(a.Insert(2,'c'));
            Console.WriteLine(a.Length);
            Console.WriteLine(a.MaxCapacity);
            Console.WriteLine(a.Remove(1,2));
            Console.WriteLine(a.Replace("th","ht"));
            Console.WriteLine(a.ToString());
           
 
        }
    }
}