浅谈C#之字符串

字符串的处理

C# 中单个字符用单引号包含就是 char 类型,(‘ a’ ),单引号中放且只能放一个字符。 ASCII

单个字符也可以表示为字符串,还可以有长度为 0 的字符串。 null "" 的区别, String.IsNullOrEmpty
使用 s.Length 属性来获得字符串中的字符个数
string 可以看做是 char 的只读数组。 char c = s[1]; 。例子:遍历输出 string 中的每个元素。
C# 中字符串有一个重要的特性: 不可变性 ,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的 char ,不能对指定位置的 char 进行修改。
如果要对 char 进行修改,那么就必须创建一个新的字符串,用 s. ToCharArray () 方法得到字符串的 char 数组,对数组进行修改后,调用 new string(char[]) 这个构造函数(暂时不用细研究)来创建 char 数组的字符串。一旦字符串被创建,那么 char 数组的修改也不会造成字符串的变化。例子:将字符串中的 A 替换为 a

 //字符串是不可变的,所以要先生成一个char[],再对char[]进行修改

            //再根据char[]生成新的字符串,但是原先的字符串没有改变(他就在那里)

            //可以根据人生成模型,也可以根据模型生成人,但是人不能修改。

           //这样根据李咏生成模型,然后把脸搞短,再生成李咏2,李咏2和李咏是两个对象

            //s=new string(s);相当于李咏2把李咏杀死替换了李咏,好像李咏脸变短了,但是是两个实例

            //string s="abc";是声明一个变量s,把s指向"abc"这个字符串。

            //strings1 = "123456";

            //char[] chars1 =s1.ToCharArray();//是根据s1复制一份char[]

            //chars1[0] = 'w';//不会影响s1

            //string s2 = new string(chars1);//根据chars1产生一份新的string

            //Console.WriteLine(s2);

            //Console.WriteLine(s1);

            //chars1[0] = 'c';//并不会影响s2

            //Console.WriteLine(s2);

            //面试练习题:字符串转换为大写、小写、翻转inttostring

是一个拷贝的过程:

 //strings1 = "123456";

            //char[] chars1 =s1.ToCharArray();//是根据s1复制一份char[]

            //chars1[0] = 'w';//不会影响s1

            //string s2 = new string(chars1);//根据chars1产生一份新的string

            //Console.WriteLine(s2);

            //Console.WriteLine(s1);

            //chars1[0] = 'c';//并不会影响s2

            //Console.WriteLine(s2);

string[]c = new string[]{ "","","","","","","","","","","","","" };

            try

            {

                string input = "200995";

                StringBuilderstr =new StringBuilder();

                for (intcount = 0; count < input.Length;count++)

                {

                    string temp = input.Substring(count,1);

                    switch (temp)

                    {

                        case "1": str.Append(c[1]);break;

                        case "2": str.Append(c[2]);break;

                        case "3": str.Append(c[3]);break;

                        case "4": str.Append(c[4]);break;

                        case "5": str.Append(c[5]);break;

                        case "6": str.Append(c[6]);break;

                        case "7": str.Append(c[7]);break;

                        case "8": str.Append(c[8]);break;

                        case "9": str.Append(c[9]);break;

                        case "0": str.Append(c[0]);break;

                        case "": str.Append(c[10]);break;

                        case "": str.Append(c[11]);break;

                        case "": str.Append(c[12]);break;

                        default: break;

                    }

                }

                this.button1.Text = str.ToString();

            }

            catch (Exception ex)

            {

                throw new Exception("已经过测试");

            }

还可以进一步优化,全部用查表法


常见疑问

谁说字符串不可变? strings = " abc ";s="123" s 这不是变了吗
要区分变量名和变量指向的值的区别。程序中可以有很多字符串,然后由字符串变量指向他们,变量可以指向其他的字符串,但是字符串本身没有变化。字符串不可变性指的是内存中的字符串不可变,而不是变量不变。
strings10 = s1;//s10 指向 s1 指向的字符串,而不是 s10 指向 s1 ,哪怕 s1 以后指向了其他内存,那么 s10 还是指向 "hello"
ToLower() :得到字符串的小写形式。
注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。 s.ToLower () s= s.ToLower ()
ToUpper () :得到字符串的大写形式; Trim() 去掉字符串两端的空白(不会去掉中间的)。
s1.Equals(s2,StringComparison.OrdinalIgnoreCase) ,两个字符串进行比区分大小写的比较。推荐这种用法。
strings2 = string.Format("{0} {1} {2} ", year, month, day);
Reflector WriteLine string.Format 的关系。看别人程序的实现、看微软的实现,偷窥的快感!
strings1 = string.Join("|", values);// 第一个参数是 string 类型分隔符

字符串分割

string[]Split(params char[] separator) :将字符串按照指定的分割符分割为字符串数组;
string[]Split(char[] separator, StringSplitOptions options) 将字符串按照指定的 char 分割符分割为字符串数组( options RemoveEmptyEntries 的时候移除结果中的空白字符串);
string[]Split(string[] separator, StringSplitOptions options) 将字符串按照指定的 string 分割符分割为字符串数组。
例子 1 :从日期字符串( "2008-08-08" )中分析出年、月、日; 2008 08 08 日。
例子 2 :从一个记录了学生成绩的文本文档,每个学生成绩是一行,每行是用 | 分割的数据,用 | 分割的域分别是姓名、年龄、成绩,写程序取出成绩最高学生的姓名和成绩。参考:使用 string[] lines =System.IO.File.ReadAllLines(@"c:\root.ini" , Encoding.Default ); 从文本文件读取数据,返回值为 string 数组,每个元素是一行。( 5 min


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邹琼俊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值