字符串对象
使用字符数组来表示字符串,但是,更常见的做法是使用string关键字来声明一个字符串变量。
string关键字是System.String类的别名
1.1数组属性Length
每个数组都有一个表示其内部元素数量的属性Length,通过这个属性可以获取到数组的长度
string str = textBox1.Text;
for (int i=0;i<str.Length ;i++ )
{
char c = str[i];
listBox1.Items.Add(str[i]);
}
1.2字符串和字符
字符串本质是一个字符类型数组,数组中的每个元素都是一个字符对象。所以当声明并初始化字符串之后字符串的长度就已经确定了,字符串对象也已经确定,这时字符串对象不会再被修改。
如果要再次进行修改字符串,引用类型的数据改变是属于重新创建一个字符串对象,然后将原数据拷贝到新对象中再加上改变的数据
1.3创建String 对象
-
通过给String类变量指定一个字符串
System.String str = "你好世界!"; MessageBox.Show(str);
-
通过使用String类构造函数
一般情况下使用类需要先进行实例化,类 命名=new 类();
char[] list = { '你', '好', '世', '界' }; String str = new String(list); MessageBox.Show(str);
属性赋值的new语法和创建对象的实例化方法本质是一样的,都是根据等号左边的对象类型,创建一个新对象,所以在某些类实例化过程中必须要指定参数
-
通过使用字符串串联运算符(+)
String str = "你好"; String str2 = str + "世界"; MessageBox.Show(str2);
-
通过检索属性或调用一个返回字符串的方法
String str = button5.Text; MessageBox.Show(str);
-
通过格式化方法来转换一个值或对象为它的字符串表示形式
String str = String.Format("货币C、c(不区分大小写) |{0, -15 :C}|{1, 15 :c3}|", 1234.56789,-12.3456789); MessageBox.Show(str);
字符串对象的成员
2.1String类的属性
序号 | 属性 | 描述 |
---|---|---|
1 | [] | 在当前String对象中获取Char对象的指定位置。 |
2 | Length | 在当前的 String 对象中获取字符数。 |
2.2String类的方法
序号 | 方法 | 描述 |
---|---|---|
1 | public static int Compare( string strA, string strB ) | 比较两个指定的string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。 |
2 | public static int Compare( string strA, string strB, bool ignoreCase ) | 比较两个指定的string 对象,并返回一个表示它们在排列顺序中相对位置的整数。但是,如果布尔参数为真时,该方法不区分大小写。 |
3 | public static string Concat( string str0, string str1 ) | 连接两个string 对象。 |
4 | public static string Concat( string str0, string str1, string str2 ) | 连接三个string 对象。 |
5 | public static string Concat( stri ng str0, string str1, string str 2, string str3 ) | 连接四个string 对象。 |
6 | public bool Contains(string valu e) | 返回一个表示指定 string 对象是否出现在字符串中的值。 |
7 | public static string Copy(string str) | 创建一个与指定字符串具有相同值的新的String 对象。 |
8 | public void CopyTo( int sourceInd ex, char[] destination, int desti nationIndex, int count ) | 从string对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。 |
9 | public bool EndsWith( string valu e ) | 判断string对象的结尾是否匹配指定的字符串。 |
10 | public bool Equals( string value ) | 判断当前的string 对象是否与指定的 string 对象具有相同的值。 |
11 | public static bool Equals( string a, string b ) | 判断两个指定的string 对象是否具有相同的值。 |
12 | public static string Format( stri ng format, Object arg0 ) | 把指定字符串中一个或多个格式项替换为指定对象的字符串表示形 式。 |
13 | public int IndexOf(char value ) | 返回指定Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。 |
14 | public int IndexOf( string value ) | 返回指定字符串在该实例中第一次出现的索引,索引从 0 开始。 |
15 | public int IndexOf( char value, i nt startIndex ) | 返回指定Unicode字符从该字符串中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。 |
---|---|---|
16 | public int IndexOf( string value, int startIndex) | 返回指定字符串从该实例中指定字符位置开始搜索第一次出现的索 引,索引从 0 开始。 |
17 | public int IndexOfAny( char[] any Of ) | 返回某一个指定的 Unicode 字符数组中任意字符在该实例中第一次出现的索引,索引从 0 开始。 |
18 | public int IndexOfAny( char[] any Of,int startIndex ) | 返回某一个指定的 Unicode 字符数组中任意字符从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。 |
19 | public string Insert( int startIn dex, string value ) | 返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。 |
20 | public static bool IsNullOrEmpty (string value ) | 指示指定的字符串是否为 null 或者是否为一个空的字符串。 |
21 | public static string Join( string separator, params string[] value) | 连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素 |
22 | public static string Join( string separator, string[] value, int st artIndex, int count ) | 链接一个字符串数组中的指定元素,使用指定的分隔符分隔每个元 素。 |
---|---|---|
23 | public int LastIndexOf( char valu e ) | 返回指定Unicode字符在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。 |
24 | public int LastIndexOf( string va lue ) | 返回指定字符串在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。 |
25 | public string Remove( int startIn dex ) | 移除当前实例中的所有字符,从指定位置开始,一直到最后一个位 置为止,并返回字符串。 |
26 | public string Remove( int startIn dex, int count ) | 从当前字符串的指定位置开始移除指定数量的字符,并返回字符串。 |
27 | public string Replace(char oldChar, char newChar ) | 把当前string对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。 |
28 | public string Replace( string old Value, string newValue ) | 把当前string 对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。 |
29 | public string[] Split(params char []separator ) | 返回一个字符串数组,包含当前的 string 对象中的子字符串, 子字符串是使用指定的 Unicode 字符数组中的元素进行分隔 的。 |
30 | public string[] Split( char[] sep arator, int count ) | 返回一个字符串数组,包含当前的 string 对象中的子字符串, 子字符串是使用指定的 Unicode 字符数组中的元素进行分隔 的。int参数指定要返回的子字符串的最大数目。 |
---|---|---|
31 | public bool StartsWith( string value ) | 判断字符串实例的开头是否匹配指定的字符串。 |
32 | public char[] ToCharArray() | 返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。 |
33 | public char[] ToCharArray( int st artIndex, int length ) | 返回一个带有当前 string 对象中所有字符的 Unicode 字符数组,从指定的索引开始,直到指定的长度为止。 |
34 | public string ToLower() | 把字符串转换为小写并返回。 |
35 | public string ToUpper() | 把字符串转换为大写并返回。 |
36 | public string Trim() | 移除当前String 对象中的所有前导空白字符和后置空白字符。 |
2.3格式化字符串
将字符串转成标准字符串,能够按照C#中的规定去自动识别标准
https://blog.youkuaiyun.com/bigpudding24/article/details/50553957
占位符的使用:
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <=i; j++)
{
textBox2.Text += String.Format("{0}*{1}={2}\t",j,i,i*j);
}
textBox2.Text += "\r\n";
}
注意:
- 索引不一定必须从0开始
- 索引不一定按照从左往右从0开始的顺序排列
- 索引最大值可以小于最大的元素数,但是索引必须不得超出元素的最大索引
静态Static关键字
static静态的,不变的,在某个类中只有一个,不会因实例化对象的不同而不同。static可以修饰类、字段、属性、方法 等。如一个方法前加上static修饰后要对其进行调用可以直接通过类名点出来,不用再对类进行实例化
3.1静态类
- 只能包含静态成员(静态方法或静态变量),非静态成员是不能使用的,而非静态类可以包含静态的方法、字段、属性或事件,且无论对这个非静态类创建多少个实例,它的静态成员都只有一个。
- 不能对其实例化。
- 不能被继承,因为静态类本质是一个抽象的密封类。
- 不能包含实例构造函数
3.2静态变量
- static只能修饰成员变量,不能修饰局部变量。
- 表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值。
- 静态变量一直记录变量的值,一直到下次赋值时。
- 不同线程下访问的静态属性总是同一属性,如果某一线程更改了属性值,将造成其他线程访问属性值的错误。因此方法中访问同一静态属性就需要使用lock关键字,或创建互斥对象来保持静态属性在同一时间只能被某一对象的属性或方法 访问
- 静态成员只被创建一次,所以静态成员只有一份,而实例成员有多少个对象,就有多少个成员
3.3静态方法
- 在方法(函数)前用static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有。
- 在静态方法中只能直接调用同类中其他的静态成员(包括变量和方法), 而不能直接访问类中的非静态成员。
- 每一个线程在同一时间访问的静态方法都是不同的,因此静态方法在多线程调用中不会产生冲突。
- 在静态方法中不能直接调用实例成员,因为静态方法被调用时,对象还有可能不存在。
- this/base关键字在静态方法不能使用,因为有可能对象还不存在。
- 静态方法只能被重载,不能被重写,因为静态方法不属于类的实例成员
3.4静态构造函数
- 静态类可以有静态构造函数,静态构造函数不可继承。
- 可以用于静态类,也可用于非静态类。
- 无访问修饰符、无参数,只有一个static标志。
- 不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次
3.5什么时候适合用static修饰
- 当变量需要被共享时可以将变量定义为静态变量。
- 当方法需要被反复调用时可以将方法定义为静态方法。
- 当一个类中包含的成员都是静态时可以将类定义为静态类
3.6使用static时需要注意的地方
-
静态类中的所有成员也必须是静态
-
非静态类中的成员可以是静态也可以是非静态
-
一个静态的函数内部只能使用该函数外部的静态成员
-
一个类中的公开静态成员,在另外一个类中通过直接使用类名点的形式调用这个成员
MessageBox.Show(s); Random r = new Random(); r.Next(0, 10);