浅谈C#之字符串

来源:互联网 发布:西安软件公寓公租房 编辑:程序博客网 时间:2024/06/08 02:17

字符串的处理

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 =newStringBuilder();

                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);
ReflectorWriteLinestring.Format的关系。看别人程序的实现、看微软的实现,偷窥的快感!
strings1 = string.Join("|", values);//第一个参数是string类型分隔符

字符串分割

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


原创粉丝点击