c#基础三 常用数据类型的用法(字符串 数组 枚举)
常用数据类型的用法:
一:字符串
所有计算的下标都是从零开始!
创建:
(1) string s1 = “this is a string”;
(2) string s2 = new string(‘a’,4);//aaaa
(3) string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });//hello
得到字符串中的某个字符:
string myString = “some text”;
char chFirst = myString[2];//序号从0开始,结果为m
表示形式:
string是Unicode字符串,每个英文字母占两个字节,每个汉字也占两个字节,在计算字符串长度时,每个英文字母的长度为1,每个汉字的长度也为1.
string str = “abc张三abc”;
Console.WriteLine(str.Length);//输出为8
比较:
要精确比较两个字符串大小,可以用(静态方法)string.Compare(string s1,string s2),它返回三种可能:s1大于s2 则结果为1,相等则为0,小于则为-1,
另外:string.Compare(string s1,string s2, bool ignoreCase)是否区分大小写
但这种方法不是严格按照ASCII码值逐个排序,因此个人觉得比较时最好用(静态方法)string.CompareOridinal(s1,s2);这个方法返回s1与s2相差的ASCII码值。
若仅仅比较两字符串是否相等,可以用equals方法或者直接用”==”开比较。
- "==" : 操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
- "equals" : 操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。而字符串是一个特殊的引用型类型,
- 在C#语言中,重载了string 对象的很多方法方法(包括equals()方法),使string对象用起来就像是值类型一样。而在java中,string是纯粹的引用类型,最好用equals而不是“==”
查找:
(1) contains方法:用于查找一个字符串中是否包含指定的子字符串。
if(s1.Contains(“abc”)) Console.WriteLine(“s1中包含abc”);
(2) indexOf /lastIndexOf 方法
indexOf方法包括两种形式:
public int IndexOf(string s)//返回s在字符串首次出现的从零开始的位置,若不存在s,返回-1;
public int IndexOf(string s,int startIndex)//从startIndex处开始查找s在字符串中首次出现的位置,若找不到返回-1;
(3) indexOfAny方法:返回Unicode字符数组中任意字符在字符串实例中第一个匹配项的从零开始的搜索位置,若未找到anyof中的任何一个字符,则返回-1.
string s1 = “123abc123abc123”;
char[] c = {‘a’,’b’,’5’,’8’};
int x = s1.IndexOfAny(c);//x的结果为3
求子串:
string s = “abc123”;
string s2 = s1.Substring(2);//从第二个字符开始取到末尾,结果为”c123”
string s3 = s1.Sunstring(2,3);//从第二个字符开始取3个字符,结果为“c12”
插入:
从startIndex开始插入子字符串:public string Insert(int startIndex, string value)
删除:
删除从startIndex开始到结尾的子字符串:public string Remove(int startIndex)
删除从startIndex开始的count个字符:public string Remove(int startIndex,int count)
替换:
将oldChar的所有匹配项均替换为newChar:public string Replace(char oldChar, char newChar)
将oldValue的所有匹配项均替换为newValue:public string Replace(string oldValue, string newValue)
移除首尾指定字符:
string s1 = “ this is a book”;
string s2 = “that is a pen ”;
string s3 = “ is a pen ”;
Console.WriteLine(s1.TrimStart());//移除首部空格
Console.WriteLine(s2.TrimEnd());//移除尾部空格
Cosnole.WriteLine(s3.Trim());//移除首部和尾部的空格
string str1 = “Hello World”;
char[] c = {‘r’,’o’,’W’,’l’,’d’,’!’,’ ‘};
string str2 = str1.TrimEnd(c);//移除str1尾部在字符数组c中包含的所有字符(结果为”He”)
合并:
Jion方法:用于在数组的每个元素之间串联指定的分隔符,从而产生单个串联的字符串:(静态方法)public static string Join(string separetor, string[] value);
string [] aArray1 = {”123”,”456”,”abc”};
string s1 = string.Join(”,”,aArray1);//结果为”123,456,abc”
拆分:
Split方法:用于将字符串按照指定的一个活多个字符进行分离,从而得到一个字符串数组,public string[] Split(params char[] separator),多个参数用逗号隔开
string[] sArray2 = s1.Split(’,’);//sArray2与sArray1相同
string s2 = “abc 12;34,56”;
string [] sArray3 = s2.Split(‘,’,’;’,’ ‘)//分隔符为逗号、分号、空格
Console.WriteLine(string.Join(Environment.NewLine,sArray3));
结果为:
abc
12
34
56
大小写转换:
s1.ToUpper(); s1.ToLower()
String 与 StringBuilder的区别:
String 类拜师一系列不可变的字符,所谓不可变即无法直接修改给该字符串分配的堆中的字符串,如myString +=” and a bit more”;是返回一个新的实例,因此这种操作如果 很多,对内存的消耗是非常大的;因此 如果字符串连接次数不多,使用“+”号比较方便,如果有大量字符串连接操作,应使用StringBuilder类
StringBuilder类位于System.Text命名空间下,每次重新生成字符串时不再是生成一个新实例,二十直接在原来字符串占用的内存空间上进行处理,而且它可以动态的分配占用的内存空间大小,因此,在字符串连接操作比较多的情况下,使用StringBuilder类可以大大提高系统性能。
StringBuilder sb = new StringBuilder();
sb.Append(”string1”);
sb.AppendLine(”string2”);
sb.Append(”string3”);
string s = sb.ToString();
Console.WriteLine(s);
结果:string1string2
string3
追加格式化字符串:sb.AppendFormat(”{0}”,”string4”);
二:数组
数组的声明和初始化:
new 运算符用于创建数组并将数组元素初始化为他们的默认值。Int类型默认值为0,bool类型默认值为false,引用类型默认值为null
int[] a = new int[30];
string[] b;
int number = int.Parse(Console.ReadLine());
b = new string[number];
简化形式:
string[] mystring ={“first”,”second”,”third”};
不带new运算符的简化形式只能用在声明语句中:
string[] mystring;
mystring = {“first”,”second”,”third”};//错误
mystring = new string[]{“first”,”second”,”third”};//正确
秩和长度
数组的秩是指数组的维数,一维数组秩为1 二维数组秩为2
数组的长度是指数组中所有元素的个数:
int[ , ] b = new int[3,5];
Console.WriteLine(“秩为{0}”,b.Rank);//2
Console.WriteLine(“长度为{0}”,b.Length);//15
for(int i=0;i<g.GetLength(0);i++)// g.GetLength(0)获取第0维的长度:3
for(int j =0;j<b.GetLength(1);j++)// g.GetLength(1)获取第1维的长度:5
Console.WriteLine(“b[{0},{1}]={2}”,i,j,b[i,j]);
一维数组:
int[] a = new int[30];
a[0]=23;a[29]=32;
int arrayLength = a.Length;//数组长度
多维数组:
二维矩形数组:数组中的每一行都有相同的列数
int [,] n1 = new int[3,2]{{1,2},{3,4}.{5,6}};
int [,] n2 = new int[,]{{1,2},{3,4}.{5,6}};
int [,] n3 = {{1,2},{3,4}.{5,6}};
交错数组:
一维数组的每一个元素又是一个数组,也可以把交错数组称为“数组的数组“,每一行的列数可以相同,也可以不同。
int [][] n1 = new int[2][]// new int[2][]可以不写或者写为new int[][]
{
new int[]{2,3,4},// new不可以省略
new int[]{1,3,4,5}// new不可以省略
}
交错数组的每一个元素既可以是一维数组,也可以是多维数组。
string[][] b = new string[3][];
b[0]= new string[2]{“b11”,”b12”};
b[1]=new string[3]{“b21”,”b22”,”b23”};
b[2]= new string[5]{“a”,”e”,”i”,”o”,”u”};
for(int i=0;i<b.Length;i++)//交错数组b中数组的个数
for(int j =0;j<b[i].Length;j++)//第i个数组的元素个数
Console.Write(“b[{0}][{1}]={2}”,i,j,b[i][j]);
动态改变数组大小
(静态方法)public static void Resize(ref T[] array,int newSize);
数组的排序与查找:
string[] books{“java”,”c#”,”c++”,”vb”};
(静态方法)Array.Sort(books); //升序排列
(静态方法)Array.Reverse(books)//降序排列
Console.WriteLine(“数组中是否含有元素c#:{0}”,book.Contains(“c#”)?true:false);
Console.WriteLine(“元素c#在降序排序后的数组中的位置为:{0}”,Array.IndexOf(books,”c#”)); (静态方法)
统计运算和字符串之间的转换
int[] a = {10,20,4,8};
string[] s = new string[a.Length];
for(int i=0;i<a.Length;i++)
{
s[i]=a[i].ToString();
}
Console.WriteLine(“初始值:{0}”,string.Jion(“,”,s));//10,20,4,8
Console.WriteLine(“平均值:{0}”,a.Average());
Console.WriteLine(“和:{0}”,a.Sum());
Console.WriteLine(“最大值:{0}”,a.Max());
Console.WriteLine(“最小值:{0}”,a.Min());
三:枚举
定义:
位置:定义在命名空间下面,而不是定义在类的内部!
枚举类型定义的所有常量共用一中基本类型,基本类型是指8中整形中的任何一种整形,用冒号来指定是那种基本类型:
(1) enum Number:byte{x1 = 3,x2=5};
(2) enum Numebr:byte{x1=254,x2}//后面的常量会自动增加1
一般情况下,不需要指明基本类型,也不需要指明各个常量的值。默认情况下,系统使用int型作为基本类型,且第一个元素值为0,每一个元素值一次递增1:
enum Days{Sun,Mon,Tue};//Sun:0,Mon:1,Tue:2
用法:
View Code

浙公网安备 33010602011771号