第一节 42字符串基础

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/* 
 * 字符串的处理
 */
namespace _42字符串基础
{
    class Program
    {
        static void Main(string[] args)
        {
            //C#中的单个字符用单引号包含就是char类型,('a'),单引号中放且只能放一个字符
            //char a = 'a';
            //char b = 'aaa';  错


            //单个字符也可以表示为字符中,还可以有长度为0的字符串通一气
            //string a = "a";
            //string b = "";

            //string 可以看做是char的只读数组,char c= s[1]. 例子: 历输出string中的每个元素
            /*string s1 = "afsafsfasfaf";
            //c//har[] b = a.ToCharArray();
            for (int i = 0; i < s1.Length; i++) 
            {
                char c1 = s1[i];
                Console.WriteLine("第{0}个字符为:{1}",i,c1);
            }*/

            //C#中字符串有一个重要的特性,<<不可变性>>,字符串一旦声明就不再可以改变,所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改
            /*string s1 = "Hello";
            string s2 = s1;  //s2直向s1所在的内存空间
            //s1[0] = "h"; //这样操作是不行的
            char[] chars = s1.ToCharArray();
            chars[0] = 'h';
            //请记住,这里并不是修改了s1的值,而是让s1重新指向了一个内存空间,而这块内存空间写的是hello
            s1 = new string(chars);
            Console.WriteLine("s1的值为:{0}",s1);
            Console.WriteLine("s2的值为:{0}",s2);
            //常风疑问:
            //谁说字符串不可变?string s="abc", s="123"; s这不是变了吗
            string s ="abc";
            s = "123"; //这里并没改abc这块内存空间,而是让s重新指向了一块内存空间
            */
            //要区分变量名和变量指向的值的区别,程序中可以有很多字符串,然后由字符串变量指向它们,变量可以指向其他的字符串,但是不定字符串本身没有变化,字符串不可变性指的是内存中的字符串不可变,而不是变量不变


            //string类常用函数
            //ToLower(); 得到字符串的小写形式
            /*string s = "HELLO";
            string s1 = s.ToLower();
            Console.WriteLine(s1);

            string s2 = s.ToUpper();
            Console.WriteLine(s2);
            //注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回
            //s.ToLower()与 s = s.ToLower()
            //ToUpper();得到字符串的大写形式
            //Trim()去掉字符串两端的空白
            string s3 = "   Hello   ";
            Console.WriteLine(s3);
            string s4 = s3.Trim();
            Console.WriteLine(s4);*/

            //s1.Equals(s2,StringComparison.OrdinallgnoreCase),两个字符串进行区分大小写的比较
            /*bool b = ("abc"=="ABC");
            Console.WriteLine(b);

            //Ignore忽略, case:大小写
            //==是区分大小写的比较,Equals("ABC",StringComparison.OrdinalIgnoreCase)是忽略大小写的比较
            bool bb = "abc".Equals("ABC",StringComparison.OrdinalIgnoreCase);
            Console.WriteLine(bb);

            //两个字符进行比较
            //如果相等返回0,如果abc大于123返回比0大的值,如果123大于abc返回负值
            int i = "abc".CompareTo("123");*/

            //字符串的分割
            //string[] Split(params char[] separator); 将字符串按照指定的分割符分割为字符串数组
            /*string names = "aa,bb,cc,dd,ee,ff";
            string[] namei = names.Split(',');
            foreach (string name in namei) {
                Console.WriteLine("我的名字是:{0}",name);
            }*/

            //string[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分割符分割除为字符串数组(opations取RemoveEmptyEntries的时候移除结果中的宽白字符串)

            /*string names = "aa,bb,cc,dd,ee|ff,*ff";
            string[] namei = names.Split(',','|','*');
            foreach (string name in namei)
            {
                Console.WriteLine("我的名字是:{0}", name);
            }*/


            /*string names = "aa,bb,cc,dd,ee,ff,,ss,,,ff";
            //第一个参数必须是一个char组数
            //string[] namei = names.Split(',', StringSplitOptions.RemoveEmptyEntries());
            //去掉空的数据
            string[] namei = names.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string name in namei) {
                Console.WriteLine("我的名字是:{0}", name);
            }*/


            //string[] Split(string[] separator, StringSplitOptions options)将字符串按照指定的string分割为字符串数组
            /*string s = "我是刘邦我是关丽我是张飞";
            string[] ss = s.Split(new string[]{"我是"}, StringSplitOptions.RemoveEmptyEntries);
            foreach (string _ss in ss) {
                Console.WriteLine("也也:{0}",_ss);
            }*/

            //例子1: 从日期字符串("2008-08-08")中分析出年月日;
            //string date = "2008-08-08";
            //string[] _date = date.Split('-');
            //Console.WriteLine("{0}年{1}月{2}日",_date[0],_date[1],_date[2]);

            //例子2: 从一个记录了学生成绩的文本文档,每个学生成绩是一行,每行是用|分割的数据,用|分害的域分别是姓名,年龄成绩
            //写程序取出成绩最高学生的姓名和成绩
            /*string[] lines = System.IO.File.ReadAllLines(@"D:\roo.ini", Encoding.Default);
                        int sum = 0;
                        string name="";
                        foreach (string line in lines) {
                             //Console.WriteLine(line);
                            string[] a = line.Split('|');
                            int _sum = Convert.ToInt32(a[2]);
                            if (_sum > sum) {
                                sum = _sum;
                                name = a[0];
                            }
                        }
                        Console.WriteLine("取高分为:{0}",sum);
                        Console.WriteLine("名称为:{0}",name);*/

            //字符串函数详解
            //字符串替换: stirng Replace(stirng oldValue, stirng newValue)将字符串中的出现oldValue的地方替换为newValue,
            /*string names = "我是张飞";
            string na = names.Replace("张飞","向铃川");
            Console.WriteLine(na);

            //取子字符串: string Substring(int startIndex),取从位置startIndex开始一直到最后的字符串
            string name2 = names.Substring(2);
            Console.WriteLine(name2);

            //string Substring(int startIndex, int lenght)取从位置startIndex开始长度为length的子字符串,如果字符串的长度不足Lenght则报错
            string title = "我家北京天安门,天安门上红旗飞";
            string _title = title.Substring(3,title.Length-3);
            Console.WriteLine(_title);

            //bool Contains(string value)判断字符串中是否含有子串value
            bool ii = title.Contains("天安门");
            Console.WriteLine(ii);

            //bool StartsWidth(String value)判断字符串是否以子串value开始
            bool tt = title.StartsWith("我家");
            Console.WriteLine(tt);

            //bool EndsWith(string value)判断字符串是否以子串value结束
            bool tt1 = title.EndsWith("aaa");
            Console.WriteLine(tt1);

            //int IndexOf(string value); 取子串value第一次出现的位置
            int index = title.IndexOf("天");
            Console.WriteLine(index);*/


            //字符串的处理练习
            //接收用户输往返字符串,将其中的字符以与输入相反的顺序输出
            /*Console.WriteLine("请输入字符串:");
            string str = "";
            str =  Console.ReadLine();
            for (int i = 0; i<str.Length; i++) {
                Console.WriteLine(str[i]);
            }
            for (int j = str.Length-1; j >= 0; j--) {
                Console.WriteLine("j等于:{0},值为:{1}",j,str[j]);
            }*/

            //接收用户输入的一句项文,将其中的单词以反序输出
            /*Console.WriteLine("请输入一句英文:");
            string str = Console.ReadLine();
            string[] _str = str.Split(' ');
            Console.WriteLine("输入的字符为:{0}",str);
            Console.WriteLine("转换后:");
            for (int i = _str.Length - 1; i >= 0; i--) {
                Console.WriteLine(_str[i]);
            }*/

            //从Email中提取出用户名和域名
            /*string email = "xlc@163.com";
            int i = email.IndexOf('@');
            string start = email.Substring(0,i);
            string end = email.Substring(i+1);
            Console.WriteLine("用户名为:{0},域名为:{1}",start,end);*/

            //读取文章标题和内容
            string[] lines = System.IO.File.ReadAllLines(@"d:\1.txt", Encoding.Default);
            foreach (string str in lines) {
                //Console.WriteLine(str);
                string[]  vstr = str.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries);
                string title = vstr[0];
                string author = vstr[1];

                if (title.Length >= 17) {
                    title = title.Substring(0, 17);
                    title += "......";
                }
                Console.WriteLine("标题:{0} | 作者:{1}",title,author);
            }


            Console.ReadKey();
        }
    }
}

  

posted @ 2012-02-21 00:05  简单--生活  阅读(334)  评论(0编辑  收藏  举报
简单--生活(CSDN)