C#(静态String类)

C#中提供了比较全面的字符串处理方法,很多函数都进行了封装为我们的编程工作提供了很大的便利。System.String是最常用的字符串操作类,可以帮助开发者完成绝大部分的字符串操作功能,使用方便。

1. 比较字符串

比较字符串是指按照字典排序规则,判定两个字符的相对大小。按照字典规则,在一本英文字典中,出现在前面的单词小于出现在后面的单词。在String类中,常用的比较字符串的方法包括Compare、CompareTo、CompareOrdinal以及Equals,下面进行详细介绍。

Compare方法是String类的静态方法,用于全面比较两个字符串对象,包括6种重载方法。CompareTo方法将当前字符串对象与另一个对象做比较,其作用与Compare类似,返回值也相同。CompareTo与Compare相比,区别在于:CompareTo不是静态方法,可以通过一个String对象调用;CompareTo没有重载形式,只能按照大小写敏感方式比较两个整串。

Equals方法用于方便地判定两个字符串是否相同,有两种重载形式:

public boolEquals(string)

public static boolEquals(string,string)

如果两个字符串相等,Equals()返回值为True;否则,返回False。

String支持两个比较运算符“==”、“!=,分别用于判定两个字符是否相等和不等,并区分大小写。相对于上面介绍的方法,这两个运算符使用起来更加直观和方便。下例中,使用“==”、“!=”对“Hello”和“World”进行比较。

2. 定位字符串和子串

定位子串是指在一个字符串寻找其中包含的子串或者某个字符,在String类中,常用的定位子串和字符的方法包括StartWith/EndsWith、IndexOf/LastIndexOf以及IndexOfAny /LastIndexOf下面进行详细介绍。

StartWith/EndsWithStartWith方法

可以判定一个字符串对象是否以另一个子字符串开头,如果是返回True;否则返回False。其定义为:

Public bool StartsWith(string value) //其中,参数value即待判定的子字符串。

IndexOf/LastIndexOf

IndexOf方法用于搜索一个字符串,某个特定的字符或子串第一次出现的位置,该方法区分大小写,并从字符串的首字符开始以0计数。如果字符串中不包含这个字符或子串,则返回-1。共有如下6种重载形式。

定位字符:

  1. intIndexOf(charvalue)
  2. intIndexOf(charvalue,intstartIndex)
  3. intIndexOf(charvalue,intstartIndex,intcount)

定位子串:

  1. intIndexOf(stringvalue)
  2. intIndexOf(stringvalue,intstartIndex)
  3. intIndexOf(stringvalue,intstartIndex,intcount)

在上述重载形式中,其参数含义如下:

Value:待定位的字符或者子串。

startIndex:在总串中开始搜索的起始位置。

Count:在总串中从起始位置开始搜索的字符数。

IndexOfAny/LastIndexOfAnyIndexOfAny方法

其功能同IndexOf类似,区别在于,可以搜索在一个字符串中,出现在一个字符数组中的任意字符第一次出现的位置。同样,该方法区分大小写,并从字符串的首字符开始以0计数。如果字符串中不包括这个字符或子串,则返回-1。IndexOfAny有3种重载形式:

  1. intIndexOfAny(char[] anyOf)
  2. intIndexOf(char[] anyOf,intstartIndex)
  3. intIndexOf(char[] anyOf,intstartIndex,intcount)

在上述重载形式中,参数含义如下:

anyOf:待定位的字符数组,方法将返回这个数组中任意一个字符第一次出现的位置。

startIndex:在总串中开始搜索的起始位置。

Count:在总串中从起始位置开始搜索的字符数。

3. 格式化字符串

Format方法用于创建格式化的字符串以及连接多个字符串对象。Foramt方法也有多个重载形式,最常用的为:

public static string Format(string format,params object[] args);

其中,参数format用于指定返回字符串的格式,而args为一系列变量参数。可以通过下面的实例来掌握其使用方法。

newStr="";

newStr=String.Format("{0},{1}!",strA,strB);

Console.WriteLine(newStr);//Hello,World!

在format参数中包含一些用大括号括起来的数字,如{0}、{1},这些数字分别一一对应于args参数数组中的变量。在生成结果字符串时,将使用这些变量代替{i}。需要说明的是,这些变量并不要求必须为String类型。在特定的应用中,Format方法非常方便。例如,想要输出一定格式的时间字符串,便可以使用Format方法,如下面代码所示。

newStr=String.Format("CurrentTime={0:yyyy-MM-dd}",System.DateTime.Now);

Console.WriteLine(newStr);//形如:2006-05-19

其中,格式字符串“yyyy-MM-dd”指定返回时间的格式形如“2006-05-19”,其定义参考System.Globalization.DateTimeFormatInfo类。

4. 连接字符串

Concat方法

Concat方法用于连接两个或多个字符串。Concat方法也有多个重载形式,最常用的为:public static string Concat(paramsstring[] values);其中,参数values用于指定所要连接的多个字符串,可以通过下面的实例来掌握其使用方法。

//ConcatnewStr="";

newStr=String.Concat(strA," ",strB);

Console.WriteLine(newStr);//“Hello World"

Join方法

Join方法利用一个字符数组和一个分隔符串构造新的字符串。常用于把多个字符串连接在一起,并用一个特殊的符号来分隔开。Join方法的常用形式为:public static string Join(stringseparator,string[] values);其中,参数value为指定的分隔符,而values用于指定所要连接的多个字符串数组,下例用“^^”分隔符把“Hello”和“World”连起来。

//Join

newStr="";

String[] strArr={strA,strB};

newStr=String.Join("^^",strArr);

Console.WriteLine(newStr);//"Hello^^World"

连接运算符“+”

String支持连接运算符“+”,可以方便地连接多个字符串,例如,下例把“Hello”和“World”连接起来。

newStr="";

newStr=strA+strB;

Console.WriteLine(newStr);//"HelloWorld"

5. 分隔字符串

使用前面介绍的Join方法,可以利用一个分隔符把多个字符串连接起来。反过来,使用Split方法可以把一个整串,执照某个分隔符,分裂成一系列小的字符串。例如,把整串,按照某个分隔符,分裂成一系列小的字符串。例如,把整串“Hello^^World”按照字符“^”进行分裂,可以得到3个小的字符串,即“Hello”、“”(空串)和“World”。

Split有多个重载形式,最常用的形式为:

public string[] Split(paramschar[] separator);

其中,参数separator数组包含分隔符。下例把“Hello^^World”进行分裂

//Split

newStr="Hello^^World";

char[] separator={'^'};

String[] splitStrings=new String[100];

splitStrings=newStr.Split(separator);

inti=0;

while(i<splitStrings.Length)

{

Console.WriteLine("item{0}:{1}",i,splitStrings[i]);

i++;

}

输出结果如下:Item0:Hello Item1:  Item2:World

6. 插入和填充字符串

String类包含了在一个字符串中插入新元素的方法,可以用Insert方法在任意插入任意字符。Insert方法用于在一个字符串的指定位置插入另一个字符串,从而构造一个新的串。Insert方法也有多个重载形式,最常用的为:

public string Insert(intstartIndex,stringvalue);

其中,参数startIndex用于指定所要插入的位置,从0开始索引;value指定所要插入的字符串。下例中,在“Hello”的字符“H”后面插入“World”,构造一个串“HWorldello”。

//Insert

newStr="";

newStr=strA.Insert(1,strB);

Console.WriteLine(newStr);//"HWorldello"

7. 删除和剪切字符串

Remove方法

Remove方法从一个字符串的指定位置开始,删除指定数量的字符。最常用的形式为:

public string Remove(intstartIndex,intcount);

其中,参数startIndex用于指定开始删除的位置,从0开始索引;count指定删除的字符数量。下例中,把“Hello”中的“ell”删掉。

//RemovenewStr="";newStr=strA.Remove(1,3);

Console.WriteLine(newStr);//"Ho"

Trim/TrimStart/TrimEnd

Trim方法

若想把一个字符串首尾处的一些特殊字符剪切掉,如去掉一个字符串首尾的空格等,可以使用String的Trim()方法。其形式如下:

public string Trim();

public string Trim(paramschar[] trimChars);

其中,参数trimChars数组包含了指定要去掉的字符,如果缺省,则删除空格符号。下例中,实现了对“@Hello#$”的净化,去掉首尾的特殊符号。

//Trim

newStr="";

char[] trimChars={'@','#','$',' '};

String strC="@Hello# $";

newStr=strC.Trim(trimChars);

Console.WriteLine(newStr);//"Hello"

另外,同Trim类似,TrimStart和TrimEnd分别剪切掉一个字符串开头和结尾处的特殊字符。

8. 复制字符串

String类包括了复制字符串方法Copy和CopyTo,可以完成对一个字符串及其一部分的复制操作。

Copy方法

若想把一个字符串复制到另一个字符数组中,可以使用String的静态方法Copy来实现,其形式为:public string Copy(stringstr);其中,参数str为需要复制的源字符串,方法返回目标字符串。

CopyTo方法

CopyTo方法可以实现Copy同样的功能,但功能更为丰富,可以复制字符串的一部分到一个字符数组中。另外,CopyTo不是静态方法,其形式为:

public void CopyTo(intsourceIndex,char[] destination,intdestinationIndex,intcount);

其中,参数sourceIndex为需要复制的字符起始位置,destination为目标字符数组,destinationIndex指定目标数组中的开始存放位置,而count指定要复制的字符个数。

下例中,把strA字符串“Hello”中的“ell”复制到newCharArr中,并在newCharArr中从第2个元素开始存放。

char[] newCharArr=new char[100];

strA.CopyTo(2,newCharArr,0,3);

Console.WriteLine(newCharArr);//"Hel"

9. 替换字符串

要替换一个字符串中的某些特定字符或者某个子串,可以使用Replace方法来实现,其形式为:

public string Replace(char oldChar, char newChar);

public string Replace(string oldValue, string newValue);

其中,参数oldChar和oldValue为待替换的字符和子串,而newChar和newValue为替换后的新字符和新子串。下例把“Hello”通过替换变为“Hero”。

//Replace

newStr=strA.Replace("ll","r");

Console.WriteLine(newStr);

10. 更改大小写

String提供了方便转换字符串中所有字符大小写的方法ToUpper和ToLower。这两个方法没有输入参数,使用也非常简单。下例首先把“Hello”转换为“HELLO”,然后再变为小写形式“hello”。

本节介绍了最常用的String类,并从比较、定位子串、格式化、连接、分裂、插入、删除、复制、大小写转换10个方面介绍了其方法。之所以称String对象为静态串,是因为一旦定义一个String对象,就是不可改变的。在使用其方法(如插入、删除操作)时,都要在内在中创建一个新的String对象,而不是在原对象的基础上进行修改,这就需要开辟新的内存空间。如果需要经常进行串修改操作,使用String类无疑是非常耗费资源的,这时需要使用StringBuilder类。

C# String字符串的更多相关文章

  1. Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0

    课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值  String str=& ...

  2. [CareerCup] 1.3 Permutation String 字符串的排列

    1.3 Given two strings, write a method to decide if one is a permutation of the other. 这道题给定我们两个字符串,让 ...

  3. 03-Java String字符串详解

    1.Java字符串String A.实例化String字符串:直接赋值(更合理一些,使用较多).使用关键字new. B.String内容的比较 // TODO Auto-generated metho ...

  4. C++学习38 string字符串的增删改查

    C++ 提供的 string 类包含了若干实用的成员函数,大大方便了字符串的增加.删除.更改.查询等操作. 插入字符串 insert() 函数可以在 string 字符串中指定的位置插入另一个字符串, ...

  5. C++学习37 string字符串的访问和拼接

    访问字符串中的字符 string 字符串也可以像字符串数组一样按照下标来访问其中的每一个字符.string 字符串的起始下标仍是从 0 开始.请看下面的代码: #include <iostrea ...

  6. java String字符串——进度1

    String字符串    在JAVA中提供了多种创建字符串对象的方法,这里介绍最简单的两种,    第一种是直接赋值,    第二种是使用String类的构造方法:    如下所示:    Strin ...

  7. 关于String字符串反转

    这是网上看到的一篇java面试题中的问题: 问题是: 如何将一个String字符串反转. String str = "1234567"; int length = str.leng ...

  8. JavaScript的内置对象(Date日期+string字符串)基础语法总结

    1.Date日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 1)定义一个时间对象 : var Udate=new Date(); //注意:使用关键字new,Date()的首 ...

  9. 【转】String字符串相加的问题

    String字符串相加的问题 前几天同事跟我说我之前写的代码中在操作字符串时候,使用字符串相加的方式而不是使用StringBuffer或者StringBuilder导致内存开销很大.这个问题一直在困扰 ...

  10. 从零开始学习前端JAVASCRIPT — 3、JavaScript基础string字符串介绍

    1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 基本数据类型:var sStr = '字符串'; 对象的方法:var oStr = n ...

随机推荐

  1. WEB框架Django之中间件/缓存/CBV/信号

    一Djano的中间件 1 中间件的概念 中间件顾名思义,是介于request与respose处理之间的一道处理过程,相对比较轻量级,并且全局上改变django的输入与输出.因为改变是全局, 所有需要谨 ...

  2. sql backup

    create or replace procedure P_updateasbegin update security_price p set p.closing_price = (select MI ...

  3. axios基本使用

    1,安装axios cnpm install axios --save 2.在main.js里面引入 import axios from 'axios' /*解决在其他组件中不能用*/Vue.prot ...

  4. c# usercontrol ,networkcomms3.0 Invoke总结

    1: accordionControl 添加了自定义控件页面 之后,切换到别的页面后,原先打开的页面对象还是存在的没有被销毁,再打开时重新引用即可 private void accordionCont ...

  5. JAVA动手动脑及课后作业

    1.查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? 运行结果 true true false 原因 1)在Java中,内容相同的字串常量(“Hello”)只保存一份以节约内存,所以s0, ...

  6. 4. 深入 Python 流程控制

    除了前面介绍的 while 语句,Python 还从其它语言借鉴了一些流程控制功能,并有所改变. 4.1. if 语句 也许最有名的是 if 语句.例如: >>> x = int(i ...

  7. hdu 5455 (2015沈阳网赛 简单题) Fang Fang

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5455 题意就是找出所给字符串有多少个满足题目所给条件的子串,重复的也算,坑点是如果有c,f以外的字符也是不 ...

  8. 把一行数字(readline)读进List并以科学计数法输出(write)到文件

    主要过程是读取的时候是一行字符串,需要Strip去除空格等,然后split变成一个List. 注意这时候数据结构是List但是每一个元素是Str性质的. 所以需要map(float,List)  把这 ...

  9. ExportGrid Aspose.Cells.dll

    using Aspose.Cells; using Aspose.Words; using System; using System.Collections; using System.Collect ...

  10. 1.preparation

    1)Evarobot 安装 http://wiki.ros.org/Robots/evarobot/Tutorials/indigo/Evarobot%20Installation 2)PC 安装 a ...