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)

  1.    MessageBox.show(”its empty ok”);
  2.   String str1 = null; // 此时str1没有实例化,为null
  3.   If (string.IsNulloREmpty(str1))
  4.    MessageBox(“the str1 is null ok”);
  5.   String str1 = “”; // 此时str1是empty,同时也是一种特殊的whitespace
  6.   String str1 = “; // 此时str1是whiteSapce,而不是empty,也不是null
  7.   If (string.IsNullOrWhitespace(str1))
  8.    MessageBox.Show(“the str1 is whitespace”);
      }
    }

常用方法归类

  • 返回位置的方法

Indexof();

IndexOfAny();

LastIndexOfAny()

LastIndexOf()

  1. String strA;
    strA=”HowCanYouFindThis”;
  2. strA.IndexOf(‘o’); //表示在字符串strA中查询字符’o’最早匹配的位置,返回结果1(位置从0开始)。
  3. strA.IndexOf(‘o’,); // 表示在字符串strA中从第3个字符开始查询字符’o’最早匹配的位置,返回结果7。
    //也可以进行字符串匹配查询
  4. strA.IndexOf(“you”,);//表示在字符串strA中从第3个字符开始查询字符串”you”最早匹配的位置,返回结果是6。
  5. strA.IndexOf(“find”,,,StringComparison.OridinalIgnorCase); //表示在字符串strA中从地3个字符开始13个字符内忽略字符串”find”的大小写,并返回其最早匹配位置,结果为9。
  1. string strA;
  1. strA=”HowCanYouFindThis”;
    strA.IndexOfAny(new char[]{‘c’,’f’,’w’}); //表示在字符串strA中查询字符数组中的字符最早匹配的位置,返回2。字符’f’和’w’都有匹配位置,但’w’出现的位置更早,所以返回值为2。
  2.  
  3. strA.IndexOfAny(new char[] { 'o', 'e', 'P' }, , );//表示在字符串strA中从第3位开始共3个字符查询字符数组中的字符最早匹配位置。
  1. // LastIndexOf(); 其用法和IndexOf()相似,但是字符或字符串从最后一位开始倒着往前匹配,并返回最早匹配的位置,如果匹配不成功就返回-1;
  2. 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,即是空字符。

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

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

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

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

EndWith();

Equals();

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

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

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

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

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

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

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

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

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

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

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

ToList();             // 返回List

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

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

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

  1. string strB = "MyNameIsLondon";
    List<char> strList = strB.ToList(); // 然后可以对strList进行列表操作。
  2. String strH = string.Concate(strB.Distinct()); //返回strB中唯一字符组成的字符串
  3. Dictionary<int,char> strDic = strH.ToDictionary(x=>x.GetHashCode); // 返回数据字典
  4. Foreach ( KeyValuePair<int,key> item in strH)
  5. Console.WriteLine(“the key :{}, the value :{}”,item.Key,item.Value);
  6. String[] strArray = strB.split(‘o’); //按字符’o’对字符串进行分割
  7. double di = 14532.34;
  8. string.Format(“生成一个格式化数据{,:F3}”,di); //0表示参数的展位符,12数据格式长度,F表示为生成小数,3表示小数位,字符串结果为:“生成一个格式化数据 14532.340”。

c#中的数据类型简介(string)的更多相关文章

  1. c#中的数据类型简介(委托)

    c#中的数据类型简介(委托) 什么是委托? 委托是一种类型,它封装了一类方法,这些方法具有相同的方法签名(signature).定义听起来有点拗口,首先可以确定委托是一种数据类型,那么什么是方法签名, ...

  2. c#中的数据类型简介(数组)

    c#中的数据类型简介(数组) 数组定义 可以将数组看成相同数据类型的一组或多组数据,包括一维数组,多维数组和交错数组. 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null. 交错数组是指 ...

  3. c#中的数据类型简介(枚举)

    C#中的数据类型简介(枚举) 枚举的定义 根据MSDN上给出的定义,枚举是一个指定的常数集,其基础类型可以是除Char外的任何整型. 如果没有显式声明基础类型,则使用 Int32. Enum 是 .N ...

  4. go中基本数据类型转换为string类型的方法

    代码 // 基本数据类型转换为string类型 package main import ( "fmt" "strconv" ) func main() { // ...

  5. redis安装及数据类型简介(string、list、set、sorted_set、hash)

    一:简介: redis国内最大的案例--->新浪微博 memcache:是key-value数据库 数据类型:只支持key value数据 过期策略:支持 持久化:不支持(可以通过三方程序) 主 ...

  6. c#中的数据类型简介

    一.C#中的变量和常量 C#中用于定义常量的方式有两种一个使用const关键字,一个是用readonly关键字.使用const定义的常量叫静态常量(compile-time constant),用re ...

  7. c#中的数据类型简介(委托)

    什么是委托? 委托是一种类型,它封装了一类方法,这些方法具有相同的方法签名(signature)和返回类型.定义听起来有点拗口,首先可以确定委托是一种数据类型,那么什么是方法签名,其实就是指方法的输入 ...

  8. Oracle中PL/SQL简介、基本语法以及数据类型

    Oracle中PL/SQL简介.基本语法以及数据类型 一.PL/SQL简介. Oracle PL/SQL语言(Procedural Language/SQL)是结合了结构化查询和Oracle自身过程控 ...

  9. java中 引用传递、值传递的理解(数组,自定义类,基本数据类型,String类)

    代码部分: public static void main(String[] args) { testInt(); testString(); testArray(); testX(); } publ ...

随机推荐

  1. DataSet、DataTable、DataRow区别

     DataSet 表示数据在内存中的缓存. 属性 Tables  获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据 ...

  2. 使用Jquery UI 高仿百度搜索下拉列表功能

    最近项目有个需求,在新添加商户的时候,用户输入商户名称后,如果系统中有类似的商户名称,直接显示出来,如下图的效果: 实现这个功能,直接使用了JQuery UI 插件 目前我使用的实现版本是: 网友可以 ...

  3. C# ?? 操作符示例

    static int? GetNullableInt() { return null; } static string GetStringValue() { return null; } static ...

  4. C#关于params的用法(使用数量可变的参数)

    有些方法需要传递个数不定的值进行运算.比如求最小值的方法.除了用容器外,还可以使用params来做 例子如下: using System; using System.Collections.Gener ...

  5. Reverse Linked List II java

    public static ListNode reverseBetween(ListNode head, int m, int n) { ListNode pre=head,current=head, ...

  6. Linux下安装oracle11g

    1.安装环境: Linux:Redhat Enterprise Linux 6.3 64位 Oracle:Oracle Database 11g for Linux x86-64 64位 2.修改操作 ...

  7. Sublime Text 3中使用正则表达式删除空行

    Sublime Text 3 中使用正则表达式删除空行 Ctrl+H Find What: \n\n+ Replace With:\n

  8. XAMPP下重置mysql密码

    安装XAMPP后,mysql默认是没有密码的,安全起见一般我们都会修改密码. 密码太多,经常会忘记密码,那么,我们可以通过通过以下步骤可以重置mysql密码. 步骤如下: 1. 停止mysql 2.  ...

  9. Unix环境下PS1变量的设置

    我的ps1命令提示符: export PS1="\[\e[31;1m\]\u @ \[\e[34;1m\]\h \[\e[36;1m\]\w \[\e[33;1m\]\t $ \[\e[37 ...

  10. python运维开发(十)----IO多路复用线程基本使用

    内容目录: python作用域 python2.7和python3.5的多继承区别 IO多路复用 socketserver模块源分析 多线程.进程.协程 python作用域  python中无块级作用 ...