zoukankan      html  css  js  c++  java
  • c#中的数据类型简介(string)

     

    Sting 字符串

    引入话题

    字符串是一个引用类型,从string数据类型的代码定义中也可以看出它实现了IEnumerable<char>接口和IEnumerable接口,因此字符串可以看成由字符前后相连组成的字符集合。string 数据类型实现了枚举迭代器功能和IEnumeratble<T>的非常多的扩展方法,同时它还实现了IComparable用于字符串比较的接口,ICloneable用于字符串副本复制接口,IConvertible用于实现数据转换的接口等。字符串还定义了索引器的功能,比如:String  strSql=”select ID from students where ID>10”;可以这样去取字符 Char c = strSql[2];

    明晰几个“空”的概念

    class Program
    {

      static void Main(string[] args)
      {

         String str1= “”;             // 此时str1 赋值空,但不是null,因为其已实例化  

          If (str1 == string.empy)

          MessageBox.show(”it’s empty ok”);
      String str1 = null;           // 此时str1没有实例化,为null
      If (string.IsNulloREmpty(str1))
          MessageBox(“the str1 is null ok”);
      String str1 = “”;             // 此时str1是empty,同时也是一种特殊的whitespace
      String str1 = “      “;       // 此时str1是whiteSapce,而不是empty,也不是null
      If (string.IsNullOrWhitespace(str1))
         MessageBox.Show(“the str1 is whitespace”);
      }
    }

    常用方法归类

    • 返回位置的方法

    Indexof();

    IndexOfAny();

    LastIndexOfAny()

    LastIndexOf()

    String strA;
    strA
    =”HowCanYouFindThis”; strA.IndexOf(‘o’); //表示在字符串strA中查询字符’o’最早匹配的位置,返回结果1(位置从0开始)。 strA.IndexOf(‘o’,2); // 表示在字符串strA中从第3个字符开始查询字符’o’最早匹配的位置,返回结果7。
    //也可以进行字符串匹配查询 strA.IndexOf(“you”,2);//表示在字符串strA中从第3个字符开始查询字符串”you”最早匹配的位置,返回结果是6。 strA.IndexOf(“find”,2,13,StringComparison.OridinalIgnorCase); //表示在字符串strA中从地3个字符开始13个字符内忽略字符串”find”的大小写,并返回其最早匹配位置,结果为9。
    string strA;
    strA=”HowCanYouFindThis”;
    strA.IndexOfAny(new char[]{‘c’,’f’,’w’}); //表示在字符串strA中查询字符数组中的字符最早匹配的位置,返回2。字符’f’和’w’都有匹配位置,但’w’出现的位置更早,所以返回值为2。

    strA.IndexOfAny(new char[] { 'o', 'e', 'P' }, 2, 3);//表示在字符串strA中从第3位开始共3个字符查询字符数组中的字符最早匹配位置。
    // LastIndexOf(); 其用法和IndexOf()相似,但是字符或字符串从最后一位开始倒着往前匹配,并返回最早匹配的位置,如果匹配不成功就返回-1;
    strA.LastIndexOf(‘o’);                              //返回7,也就是“you” 的 “o” 位置。
    • 返回字符的方法,属于在Enumerable类中对IEnumerable<T>接口的扩张方法:

    First();                       //string的实例的扩展方法,找出满足条件的第一个字符,如没有就抛出错误。

    FirstOrDefault();         //找出满足条件的第一个字符,如果没有就返回ASCII码0,是一种安全的操作方法

    Last();                       //使用方法同First(),返回最后一个满足条件的字符,如没有就抛出错误。

    LastOrDefault();         //找出满足条件的最后一个字符,如果没有就返回ASCII码0,是一种安全的操作方法。

    ElementAt();              //返回某一位置的字符,如果位置超出string的范围,就会抛出错误;

    ElementAtOrDefault();  //返回某一位置的字符,如果位置超出string的范围,会返回ASCII 码0,即是空字符。

    String  strB=”MyNameIsLondon”;
    Char firstChar1 = strB.First();   //直接返回字符“M”;
    Char firstChar2 = strB.First(x=>(int)x>100); // 返回第一个ASCII 码大于100的字符,返回结果为“y”;
    //也可按如下的lambda表达式定义。
    Func<char, bool> predicate = new Func<char, bool>(x => (int)x > 110);
    char charFirst1 = strB.First(predicate);
    • 返回布尔的方法,这些方法大都是IEnumerable<T>接口的扩展方法

    All(); 判断字符串序列里面的所有元素是否满足条件。

    Any();判断字符串序列里面的任意元素是否满足条件。

    contains();判断字符串中是否存在指定的字符或字符串。

    EndWith();

    Equals(); 

    StartWith(); 判断字符串是否以指定字符串或字符开始,其用法和EndWith()方法非常相似。

    string strB = "MyNameIsLondon";
    bool b1 = strB.All(x=>(int)x>200);  //判断strB中每个字符的ASCII码值是否大于200,结果是false。
    bool b2 = strB.All(x=>(int)x>70);   //判断strB中每个字符的ASCII码值是否都大于70,结果是true。
    bool b3 = strB.Any(x=>x<80);        //判断strB中是否存在字符的ASCII码值小于80,结果是true;
    bool b4 = strB.contains(‘c’);       //返回结果为false;
    bool b5 = strB.contains(“Is”);      //返回结果为true;
    bool b6 = strB.EndWith(“On”,StringComparison.OrdinalIgnorCase);  //判断strB字符串是否以“On”结尾,并且字符串的比较忽略大小写,其返回的结果为true。
    bool b7 = strB.EndWith(‘N’);  //判断strB字符串是否以字符“N”结束,其返回的结果为false。
    String strC=”MyNameIs” + “London”;
    bool b8 = strB.Equals(“strC”);          //因 string是引用类型,strC和strB是不同的两个实例按理应返回false,但string的Equals方法重写过。结果还是返回true。
    bool b9 = Equals(strC, trB)             //使用object的equal方法,返回为false;
    bool b10 = ReferenceEquals(strC,strB);   //因表示两个不同的实例,所以返回false。
    strD = “MyNameIsLondon”;

    //因为strD和已定义的strB具有相同的字符串值,系统为节省内开销存将strD地址指向和strB相同的实例,因此

      ReferenceEquals(strB,strD);   //返回结果为true,结果令人比较意外。(微软称strB是strD的驻留字符串)

      strB.StartWith(“MY”,true,Cultrue.CurrentCulture);  //忽略大小写,并使用当前默认的文字区域,返回结果为true;

    • 返回字符串的方法

    Insert();

    padLef(); 

    padRight();

    Remove(); 

    Replace( );  

    Substring();

    ToUpper();         //将字符串的所有字符转为大写。

    ToLower();         //将字符串的所有字符转为小写。

    string strB = "MyNameIsLondon";
    string strResult;
    strResult = strB.Inser(2,”Last”) ;  //在第2个位置插入”Last”字符串,返回结果”MyLastNameIsLondon”。
    strResult = strB.padLef(20,’*’);    //在strB字符串左侧插入”*”,使其字符串的总长度达到20。
    strResult = strB.PadRight(20,’*’);  //在strB字符串右侧插入”*”,使其字符串的总长度达到20。
    strResult = strB.Remove(2,3);       //从strB字符串第二个位置删除三个字符。
    strResult = strB.Replace(“My”,”Your”); //将strB的字符串“My ”替换为“You”。
    strResult = StrB.Replace (‘o’,’e’);    //将strB的“o”字符替换为“e”。
    strResult = strB.substring(1,3);       //从strB的第1位置开始取三个字符(位数从0算起)。
    • 返回IEnumerable序列 ,大都属于IEnumerable<T>的扩展方法

    AsEnumerable();   //将字符串转化为一个实现IEnumerable的序列

    Select();          //将字符串序列中的每个元素进行投影。

    Skip();            //跳过序列中指定的元素,返回剩余的元素序列

    SkipWhile();    //跳过序列中指定条件的字符,返回剩余的元素序列

    Take();           //返回序列中从开始到指定位置的元素序列strB.Take();  

    TakeWhile();   //返回序列中满足条件的元素,知道不满足就停止。

    string strB = "MyNameIsLondon";
    Char[] charTrans
    = strB.Select(x=>(char)(x-1)).ToArray(); //将strB中的每个字符ASCII 码减一形成新的字符序列,然后转化为字符数组(本示例可以根据提供的投影方式用来对字符串进行加密。) String StrD = new string(charTrans); //将字符数组转化为字符串 //同样,再解密的时候,用户可以反向投影。 Char[] charTransBack = strD.Select(x=>(char)(x+1)).ToArray(); String strE= new string(charTransBack); Char[] charSkip = strB.skip(2).ToArray(); // 先转为字符数组 String StrF = new string(charSkip); // 将数组转化为字符串 //顺便提及,如果将字符数组转化为字符串,还有使用如下的方法 String.concate(charSkip); String.join(“”,charSkip); IEnumerable IE1 = strB.SkipWhile(x=>x<100); String strG= string.concate(IE1);
    • 其它方法

    ToArray();          // 返回字符数组

    ToList();             // 返回List

    ToDictionary();     //返回数据字典操作

    Split();                //安输入的条件分割字符串,分割条件比较灵活,可以是字符和字符数组,也可是字符串和字符串数组。

    format();             //返回按照一定格式生成的字符串

    string strB = "MyNameIsLondon";
    List
    <char> strList = strB.ToList(); // 然后可以对strList进行列表操作。 String strH = string.Concate(strB.Distinct()); //返回strB中唯一字符组成的字符串 Dictionary<int,char> strDic = strH.ToDictionary(x=>x.GetHashCode); // 返回数据字典 Foreach ( KeyValuePair<int,key> item in strH) Console.WriteLine(“the key :{0}, the value :{1}”,item.Key,item.Value); String[] strArray = strB.split(‘o’); //按字符’o’对字符串进行分割 double di = 14532.34; string.Format(“生成一个格式化数据{0,12:F3}”,di); //0表示参数的展位符,12数据格式长度,F表示为生成小数,3表示小数位,字符串结果为:“生成一个格式化数据 14532.340”。
    原创作品,转载时请注明作者及出处
  • 相关阅读:
    互动教程,让你5分钟掌握 Flexbox 布局模式
    Fixed Responsive Nav – 响应式的单页网站导航插件
    创意无限!一组网页边栏过渡动画【附源码下载】
    12款界面精美的 HTML5 & CSS3 网站模板
    Twproject Gantt – 开源的 JavaScript 甘特图组件
    真是好东西!一组动感的页面加载动画效果
    Method Draw – 很好用的 SVG 在线编辑器
    CSS Vocabulary – CSS 词汇表,你都掌握了吗?
    前端精选文摘:BFC 神奇背后的原理
    Vis.js – 基于浏览器的动态 JavaScript 可视化库
  • 原文地址:https://www.cnblogs.com/qqxz/p/5200082.html
Copyright © 2011-2022 走看看