版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whc888666/article/details/84026546
目录
五、string str =null 与 string str = "" 区别:
一、字符串的不变性
1.字符串的不可变性:字符串一旦声明就不再可以改变,所以只能通过索引来读取指定位置的char,不能对字符串位置的char进行修改。
2.我们对字符串进行处理,是真的改掉了字符串里面的字吗???不是。而是只改变的数组某个值而已。原来的字符串在内存中还是存在,只有等到程序结束的时候才能消失,如果这样的字符串在内存中多了就会溢出,而且字符串还是比较占用内存的。这里也体现了字符串的不可变性。
3.要区分变量名和变量指向的值的区别,程序中可以有很多的字符串,然后有字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身没有变化,字符串不可变性指的内存中的字符串不可变,而不是变量不变
4.举例(代码展示)
static void Main(string[] args)
{
//字符串的处理
string text = "哈哈,我今天真的很帅哦!";//字符串
Console.WriteLine(text .Length );//显示字符串里面的个数
text.ToCharArray();//变成了一个char的数组
char[] chs = text.ToCharArray();//定义一个char数组来接收
chs[10]='美';
text = new string(chs);//重新赋值的一个过程
Console.WriteLine(text );
Console.ReadKey();
}
二、重载
1.只读属性:这里只能读而不能赋值,但是我此时此刻就想给他赋值。那么此时就要用到构造方法了。
2.赋值的构造方法,如果我们在这里的类当中不写构造函数,这个类当中原本就有一个构造方法,但是他是没参数的构造方法;但是此刻我们写了一个有参数的构造函数,此时的类当中也只有一个构造方法,就是我们写的这个有参数的构造方法,原来的无参数的构造函数被干掉了,但是如果此时此刻我还想使用一个无参数的构造函数,我们就必须在写一个无参数的构造函数3.举例(代码展示)
public class Person//创建一个类
{
string _name;//字段
public string Name//属性
{
get { return _name; }//只读属性:这里只能读而不能赋值,但是我此时此刻就想给他赋值。那么此时就要用到构造方法了。
}
//构造方法:
public Person(string name)
{
this._name = name;
}
public Person()//无参数的构造方法
{
}
}
三、字符串长度的获取
//随机输入你心中想到的一个名字,
//然后输出他的字符串长度 Length:可以得字符串的长度
Console.WriteLine("输入你心目中想到的名字:");
string name = Console.ReadLine();
Console.WriteLine(name .Length );
Console.ReadKey();
四、大小写转换及不区分大小写
//两个学员输入各自最喜欢的课程名称
//判断是否一致,如果相等,则输出你们两个喜欢相同的课程
//如果不同,则输出你们两个喜欢不同的课程
Console.WriteLine("输入第一门课程:");
string str1 = Console.ReadLine();
Console.WriteLine("输入第二门课程:");
str1 = str1.ToLower();//把字符串转换成小写的
str1 = str1.ToUpper();//把字符串转换成大写的
string str2 = Console.ReadLine();
str2 = str2.ToLower();
str2 = str2.ToUpper();
忽略大小写的比较,返回的是bool类型的
bool result = str1.Equals(str2, StringComparison.OrdinalIgnoreCase);
if (true)
{
Console.WriteLine("课程相同");
}
else
{
Console.WriteLine("课程不同");
}
if (str1 ==str2 )
{
Console.WriteLine("课程一样",str1 );
}
else
{
Console.WriteLine("课程不同{0}------{1}",str1,str2 );
}//这里也会有问题:英语的大小写不同,就会有问题啦
//解决办法就是将字符串转换成统一的小写的
//当然也可以将所有的字符串转化成大写的
//Console.ReadKey();
五、string str =null 与 string str = "" 区别:
string str=null是不给他分配内存空间,而string str=""给它分配长度为空字符串的内存空间,string str=null没有string对象,string str=""有一个字符串对象。
六、除空格
1.第一种方法:
string str = "哈 哈 , 我 ---- 又 变 帅 了";
//像这种有很多没有用的空格,想要去除掉的方法如下:
char []chs=new char [] {' ','-'};//数组
string [] result= str .Split (chs,StringSplitOptions .RemoveEmptyEntries );//定义一个字符串类型的数组来接收
//第二参数,已经把不想要的都切掉了,
for (int i = 0; i < result .Length ; i++)
{
Console.Write(result[i]);
}
Console.ReadKey();
2.第二种方法:
//从前对象移除数组中指定的一组字符的所有钱导匹配项和尾部匹配项
Console.WriteLine("请输入您的账号:");
string name = Console.ReadLine();
name = name.Trim();//移除前后空格的
name = name.TrimEnd();//移除后面的空格
name = name.TrimStart();//移除前面的空格
Console.WriteLine(name);
Console.ReadKey();
七、去除多余不想要的字符
//去掉多余的不想要的字符
string date = "2012---------11---------11";
char[] chs = new char[] { '-' };
string[] time = date.Split(chs, StringSplitOptions.RemoveEmptyEntries);
Console.WriteLine("{0}年{1}月{2}日",time [0],time [1],time [2]);
Console.ReadKey();
八、把字符串中某些字符或者字符串替换掉
string name = "小明很漂亮!";
name =name .Replace ('很','不');
name = name.Replace("小明", "芳芳");
Console.WriteLine(name);
Console.ReadKey();
九、判断字符串中是否包含子字符串
string name = "小猪是个坏蛋!";
bool result = name.Contains("小猪");
if (result)
{
//name = name.Replace("坏蛋", "好人");
name = name.Replace("坏蛋", "**");
Console.WriteLine(name);
}
else
{
Console.WriteLine(name);
}
Console.ReadKey();
十、截取字符串
string str = "哈哈,我帅不帅?";
str = str.Substring(4, 2);
Console.WriteLine(str );
Console.ReadKey();