C#入门学习——字符串方法

命名空间

我们可以认为类是属于命名空间的,如果当前项目中没有这个类的命名空间,需要我们手动的导入这个类所在的命名空间。

1.光标去点击

2.alt+shift+f10

3.记住直接写

当我们需要在一个项目中引用另一个项目的类的时候,首先需要添加引用

然后再引用命名空间

C#入门学习——字符串方法_第1张图片

 C#入门学习——字符串方法_第2张图片

值类型和引用类型

值类型:int double bool char decimal struct enum

引用类型:string 自定义类 数组 object 接口

值类型和引用类型在内存上存储的地方不一样:值类型的值是存储在内存的栈中,引用类型的值是存储在内存的堆中。

C#入门学习——字符串方法_第3张图片

传递值类型和传递引用类型的时候,传递的方法不一样:值类型我们称之为值传递,引用类型我们称之为引用传递。

值类型在复制的时候,传递的是这个值本身。

引用类型在复制的时候,传递的是对这个对象的引用。他们指向的是同一块空间,操作哪一个另一个都会改变。

C#入门学习——字符串方法_第4张图片

 ref参数的实现原理

C#入门学习——字符串方法_第5张图片

 

相当于把number的地址复制给n,栈中地址相同了。相当于同一块空间了,改变哪个,另一个都会改变。

字符串

字符串具有不可变性:当你给一个字符串重新赋值之后,老值并没有销毁,而是重新开辟了一块空间存储新值。

C#入门学习——字符串方法_第6张图片

 这样会出现一个问题,当你对一个字符串大量的重新赋值的时候,就会产生很多内存垃圾。当程序结束后,GC扫描整个内存,如果发现有的空间没有被指向,立即把它销毁。

结合引用传递,s1和s2分别是什么?

string s1 = "zs";
string s2 = s1;
s2 = "ls";
Console.WriteLine(s1);
Console.WriteLine(s2);
Console.ReadKey();

由于字符串具有不可变性,所以s2开辟了另一块空间,s1是zs,s2是ls。

我们可以将字符串看做是char类型的一个只读数组。

            string s = "abcdefg";
            //s[0] = 'b'; 不能这样做,因为是只读的
            //首先将字符串转换成char类型的数组
            char[] chs = s.ToCharArray();
            chs[0] = 'b';
            //将字符数组转换为字符串
            s = new string(chs);
            //既然可以将string看做char类型只读数组,所以可以通过下标访问字符串中的某一个元素
            Console.WriteLine(s[0]);
            Console.ReadKey();

字符串方法

str.Length:获取当前字符串中字符的个数。

string.s="1111111";
Console.WriteLine(s.Length);

str.ToUpper():将字符串转换成大写。

str.ToLower():将字符串转换成小写。

str1.Equals(str2,StringComparison.OrdinalIgnoreCase):比较两个字符串,忽略大小写。

//比较两个课程

Console.WriteLine("请输入你喜欢的课程");
string lessonOne = Console.ReadLine();
//将字符串转换为大写
lessonOne = lessonOne.ToUpper();  
//转换成小写
//lessonOne = lessonOne.ToLower();

Console.WriteLine("请输入你喜欢的课程");
string lessonTwo = Console.ReadLine();
lessonTwo = lessonTwo.ToUpper();
//lessonTwo = lessonTwo.ToLower();

if (lessonOne.Equals(lessonTwo,StringComparison.OrdinalIgnoreCase))
{
    Console.WriteLine("相同");
}
else
{
    Console.WriteLine("不同");
}
Console.ReadKey();

str.Split():分割字符串,返回字符串类型的数组。

string s = "a b   dfd  _  +   =   ,,,   fdff";
char[] chs = { ' ', '_', '=', '+', ',' };
string[] str = s.Split(chs, StringSplitOptions.RemoveEmptyEntries);
Console.ReadKey();

str.Replace():字符串替换。

str.Contains():判断字符串中是否含有子串value。

            string str = "国家关键人物老赵";
            if (str.Contains("老赵"))
            {
                str = str.Replace("老赵", "**");
            }
            Console.WriteLine(str);
            Console.ReadKey();

str.SubString():截取字符串,在截取的时候包含要截取的那个位置。

          string str = "今天天气好晴朗,处处好风光";
          str = str.Substring(1, 2);
          Console.WriteLine(str);
          Console.ReadKey();

str.StartsWith():判断字符串中是否以子串value开始。

str.EndWith():判断字符串中是否以子串value结束。

            string str = "今天天气好晴朗,处处好风光";
            if (str.StartsWith("今天"))
            {
                Console.WriteLine("yes");
            }
            else
            {
                Console.WriteLine("no");
            }
            Console.ReadKey();

str.IndexOf():取子串value第一次出现的位置,如果没有返回-1。

str.LastIndexOf():取子串value最后一次出现的位置,如果没有返回-1。

            string str = "今天天气好晴朗,处处好风光";
            int ind = str.IndexOf('天', 2);
            Console.WriteLine(ind);
            Console.ReadKey();

            string str = "今天天气好晴朗,处处好风光";
            int ind = str.LastIndexOf('天');
            Console.WriteLine(ind);
            Console.ReadKey();

str.Trim():去掉字符串中前后的空格。

str.TrimEnd():去掉字符串中结尾的空格

str.TrimStart():去掉字符串中前面的空格。

            string str = "          hahahaha            ";
            //str.Trim();
            str = str.TrimStart();//去前面
            str = str.TrimEnd();//去结尾
            Console.Write(str);
            Console.ReadKey();

string.IsNullOrEmpty():判断是否为空。

        string str = null;
        if (string.IsNullOrEmpty(str))
        {
            Console.WriteLine("yes");
        }
        else
        {
            Console.WriteLine("no");
        }
        Console.ReadKey();

string.Join():将数组按照指定的字符串分割连接,返回一个字符串。

            string[] names = { "zs", "ls", "ww", "zl", "tq" };
            //zs|ls|ww|zl|tq
            string str = string.Join("|", names);
            Console.WriteLine(str);
            Console.ReadKey();

字符串方法练习

1.接收用户输入的字符串,将其中的字符以输入相反的顺序输出。“abc”→“cba”

            Console.WriteLine("请输入字符串");
            string s1 = Console.ReadLine();
            char[] chs = s1.ToCharArray();//转成字符数组
            Array.Reverse(chs);//反转数组
            s1 = new string(chs);//再转成字符串
            Console.WriteLine(s1);
            Console.ReadKey();

2.接收用户输入的一句英文,将其中的单词以反序输出“hello c sharp”→“sharp c hello”

            Console.WriteLine("输入一句英文,我将反转它");
            string s2 = Console.ReadLine();
            string[] word = s2.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            Array.Reverse(word);//for交换length/2
            string ns = string.Join(" ", word);
            Console.WriteLine(ns);
            Console.ReadKey();

3.从emali中提取出用户名和域名:[email protected]

            Console.WriteLine("输入一个email");
            string email = Console.ReadLine();
            int at = email.IndexOf('@');
            string name = email.Substring(0, at);
            string web = email.Substring(at + 1);
            Console.WriteLine(name);
            Console.WriteLine(web);
            Console.ReadKey();

4.文本文件中存储了多个文章标题、作者。标题和作者之间用若干个空格隔开,每行一个,标题有的长有的短,输出到控制台的时候最多标题长度10。如果超过10,则截取长度8的子串并且最后添加...,加一个|后输出作者的名字。

            string path = @"C:\Users\Flame Master\Desktop\1.txt";
            string[] contents = File.ReadAllLines(path);
            for (int i = 0; i < contents.Length; i++)
            {
                string book = "";
                string name = "";
                int fkg = contents[i].IndexOf(' ');//判断书名结尾位置
                int lkg = contents[i].LastIndexOf(' ');//判断作者姓名位置
                if (fkg - 1 > 10)
                {
                    book = contents[i].Substring(0, 8) + "...";
                }
                else
                {
                    book = contents[i].Substring(0, fkg);
                }
                name = "|" + contents[i].Substring(lkg + 1);
                contents[i] = book + name;
                Console.WriteLine(contents[i]);
            }
            Console.ReadKey();

 5.让用户输入一句话,找出所有e的位置

            Console.WriteLine("请输入一句带e的话");
            string s = Console.ReadLine();
            int index = s.IndexOf('e');
            Console.WriteLine("第1次出现e的位置是{0}", index);
            int count = 1;
            while (index != -1)
            {
                count++;
                index = s.IndexOf('e', index + 1);
                if (index == -1)
                {
                    break;
                }
                Console.WriteLine("第{0}次出现e的位置是{1}", count, index);
            }
            Console.ReadKey();

 6.让用户输入一句话,判断这句话中有没有邪恶,如果有,替换成**然后输出。

            Console.WriteLine("请输入一句话");
            string str = Console.ReadLine();
            if (str.Contains("邪恶"))
            {
                str = str.Replace("邪恶", "**");
            }
            Console.WriteLine(str);
            Console.ReadKey();

7.把{"诸葛亮","鸟叔","卡卡西","卡哇伊"}变成诸葛亮|鸟叔|卡卡西|卡哇伊",再吧|切割掉。

            string[] fg = { "诸葛亮", "鸟叔", "卡卡西", "卡哇伊" };
            string fgstr = string.Join("|", fg);
            string[] fgnew = fgstr.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            //Console.WriteLine(fgstr);
            Console.ReadKey();

你可能感兴趣的:(C#入门学习,c#,学习)