本文将完成以下两个目标:

  一、创建字符串;

  二、正则表达式;

  首先,我先来介绍一下System.String类:

  System.String是一个类,专门用于存储字符串,允许对字符串进行许多操作。

  使用运算符重载可以连接字符串:

    string str1 = "hello";            //return "hello"
    str1 +=",C#"; //return "hello,C#"
    string str2 = str1+"!"; //return "hello,C#!"

  C#还允许类似于索引器的语法来提取指定的字符:

    string s = "hello";
    char ch = s[]; //索引从0开始
    Console.WriteLine(ch); //输出为o

  另外,String类中还有许多实用的方法,例如:

    Compare方法:比较字符串的内容,判断某些字符是否相等

    返回参数:

      大于0:s1大于s2;

      等于0:s1等于s2;

      小于0:s1小于s2;

    string s1 = "hello";
    string s2 = "hello";
    int i = String.Compare(s1, s2); //比较字符串的位置,此用法为String类调用的方法,参数为两个字符串,如果仅比较两个字符串是否相等,可以用s1.Equlas(s2)方法实现
    Console.WriteLine(i); //输出 0()

    Split方法:在出现给定字符串的地方,把字符串分割为一个字符串数组

   string s1 = "hello";
   string[] s3= s1.Split('e');
   foreach (string s in s3)
   {
  Console.WriteLine(s); //输出为 h
  // llo
   }

    Substring方法:在字符串中检索给定位置的子字符串

     string s1 = "hello";
   string s3= s1.Substring(,);    //第一个参数为从索引为几开始,第二个参数为取多长
   Console.WriteLine(s3);         //输出为 hel

    这个方法有好多参数,具体用法可以自己用VS查看一下。打出这个方法之后,参数会自动提示。

    ToLower方法:把字符串转化为小写

    ToUpper方法:把字符串转化为大写

    Trim方法:在输入数据时比较实用,可以删除首尾的空格,以便与数据库内容匹配。

  此外,还有许许多多的方法很实用,如果用得到,可以参考String类的中文文档。

一、创建字符串:

  我们来说一下为什么我们要创建字符串,前面我们已经说到了,表面上str1可以通过运算符重载的方式在原本字符串的内容上修改或追加内容,但其实并非如此,因为字符串是不可变的,一个字符串对象一旦创建,值就不能再更改(在不使用不安全代码的情况下)。其实本质上是创建一个新的字符串,将最初的文本复制到这个新的字符串中,再加上额外的文本,然后更新存储在变量str1的地址,使变量正确的指向新的字符串对象,其实这本身并没有什么,但是如果我们要对字符串做大量的修改操作,这将大大降低性能和效率。例如,假定要对一个很长的字符串编码,在字母表中,用Ascii码靠后的字符替代其中的每个字母(标点符号除外),作为非常简单的加密模式的一部分。完成这个任务的方式有好几种,最简单最高效的一种是(假定使用String类):使用String.Replace()方法,该方法把字符串中指定的子字符串用另一个字符串替换。使用该方法时将创建非常多的字符串对象。如此,如果使用字符串频繁的进行文字处理,应用程序将会遇到严重的性能问题。

  为了解决这类问题,C#改为使用System.Text.StringBuilder类,StringBuilder类中的方法很少,仅限于处理替换和追加或删除字符串中的文本,但是,他的工作效率非常高。

  StringBuilder的主要方法如下:

    Append方法:给当前字符串追加一个字符串

    AppendFormat方法:追加特定格式的字符串

    Insert方法:在当前字符串中插入一个字符串

    Remove方法:从当前字符串中删除字符

    Replace方法:在当前字符串中,用某个字符全部替换另一个字符,或者用一个子字符串全部替换另一个字符串。

    ToString方法:返回当前强制转换为System.String对象的字符串

  Remove和Replace的例子:其他的例子大家可以尝试一下。

  StringBuilder sb = new StringBuilder("lalala");
sb.Replace('a', 'g');         //用字符g替换a
Console.WriteLine(sb.ToString()); //输出 lglglg
sb.Remove(,);            //从索引0开始,删除5个字符
Console.WriteLine(sb.ToString()); //输出 a

二、正则表达式

  正则表达式语言是一种专门用于字符串处理的语言。 它包含两个功能:

  • 一组用于标识字符类型的转义代码。例如,* 代表任意字符串。
  • 一个系统,在搜索操作中,它把子字符串和中间结果的各个部分组合起来。

  使用正则表达式,可以对字符串执行许多复杂而高级的操作,例如 :

  • 识别(标记或删除)字符串中所有重复的单词
  • 等等......

我们先来看一下所有的正则表达式模式:

1.字符转义:

2.字符类

3.定位点

4.分组构造

5.限定符

6.反向引用构造

7.替换构造

8.替换

9.其他构造

  当我们需要哪些模块时,我们可以再去参考,详细的模块例子请参考msdn帮助文档。

使用方法:

  使用正则表达式处理文本的中心构件是正则表达式引擎,该引擎在 .NET Framework 中由 System.Text.RegularExpressions. Regex 对象表示。

因此,我们先来看一看Regex的相关知识。

  我们需要匹配,捕获和组合。Regex通过Group类和 Capture类支持组和捕获。GroupCollection类和CaptureCollection类分别表示组和捕获的集合,Match类提供一个Groups属性,他返回相应的GroupCollection对象。Group类也相应的实现了一个Capture属性,该属性返回CaptureCollection对象,这些对象之间的关系如下图:

  以下为查找我们所需要字符串的实例代码

            //要匹配的文本
string text = "One car red car blue car";
//匹配的规则:匹配一个或多个单词为一组(小括号内为一组),
//然后匹配一个或多个空白字符
//最后匹配一个car字符串为一组,最后组合为规则所需。
string pat = @"(\w+)\s+(car)";
//实例化r,第二个参数为匹配的要求,这里为忽略大小写
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
//这里还可以写成这样
//MatchCollection mc = r.Matches(text);
//然后用下标的形式访问每个mc,返回一个匹配的结果
//Match m = mc[i];
Match m = r.Match(text);

int matchCount = ;
//此属性判断是否匹配成功
while (m.Success)
{
//匹配的个数
Console.WriteLine("Match" + (++matchCount));
//这里为什么要从下标1开始,因为下面获取组时:
//下标0为一个整组,是根据匹配规则“(\w+)\s+(car)”获取的整组
//下标1为第一个小括号里面的数据
//下标2为第二个括号里面的数据....依次论推
for (int i = ; i <= ; i++)
{
//获取由正则表达式匹配的组的集合,这行代码相当于下面两句
//GroupCollection gc = mt.Groups;
//Group g = gc[i];
Group g = m.Groups[i];
//输出
Console.WriteLine("Group" + i + "='" + g + "'");
//获取由捕获组匹配的所有捕获的集合
CaptureCollection cc = g.Captures;
for (int j = ; j < cc.Count; j++)
{
Capture c = cc[j];
System.Console.WriteLine("Capture" + j + "='" + c + "', Position=" + c.Index);
}
}
//匹配下一个
m = m.NextMatch();
}

  输出结果为:

Match1
Group1='One'
Capture0='One', Position=0
Group2='car'
Capture0='car', Position=4
Match2
Group1='red'
Capture0='red', Position=8
Group2='car'
Capture0='car', Position=12
Match3
Group1='blue'
Capture0='blue', Position=16
Group2='car'
Capture0='car', Position=21

  构造函数:

   这里可以根据实际需要实例化某个方法。

  一个判读是否匹配的方法:

     IsMatch方法:此方法的可选参数有好多,主要作用是指示所指定的正则表达式在指定的输入字符串中是否找到了匹配项。

        string[] s = {"hello world !","This is a C# language"};
Regex rg = new Regex("ll");
foreach (string ss in s)
{
Console.WriteLine("{0} 里面{1}字符串ll .", ss, rg.IsMatch(ss) ? "匹配到" : "没匹配到");
}

      显示结果为:

        hello world ! 里面匹配到字符串ll .
        This is a C# language 里面没匹配到字符串ll .

C#语言之字符串和正则表达式的更多相关文章

  1. 字符串处理(正则表达式、NSScanner扫描、CoreParse解析器)-备用

    搜索 在一个字符串中搜索子字符串 最灵活的方法 1 - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptio ...

  2. R5—字符串处理/正则表达式

    R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...

  3. JavaScript语言精粹 笔记05 正则表达式

    正则表达式 正则表达式以方法的形式被用于对字符串中的信息进行查找.替换画图提取操作.可处理正则表达式的方法有:regexp.exec, regexp.test,string.match, string ...

  4. 转义字符的理解(JAVA、字符串和正则表达式)

    一.原理总结: 要理解转义,首先要从正则表达式说起. 在正则表达式中:*和\是特殊字符:为了匹配这两个字符本身,正则表达式中需要写为\*和\\ 在Java中,只能用字符串表示正则表达式,所以需要把\* ...

  5. 字符串处理(正则表达式、NSScanner扫描、CoreParse解析器)-b

    搜索 在一个字符串中搜索子字符串 最灵活的方法 1 - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptio ...

  6. R语言拆分字符串

    R语言拆分字符串 aaa<-"aa;bb;cc"ccc<-strsplit(aaa,split=";") bbb<- unlist(strsp ...

  7. C语言之字符串处理函数

    C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...

  8. Swift3.0语言教程字符串与URL的数据转换与自由转换

    Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...

  9. Swift3.0语言教程字符串与文件的数据转换

    Swift3.0语言教程字符串与文件的数据转换 Swift3.0语言教程字符串与文件的数据转换,如果想要对字符串中的字符进行永久保存,可以将字符串中的字符写入到文件中.当然,开发者也可以将写入的内容进 ...

随机推荐

  1. icomoon字体使用

    如何灵活利用免费开源图标字体-IcoMoon篇 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/w ...

  2. Could not open logfile" occurred when run "datapatch -verbose"

    CAUSE Due to Bug 25459405 - DATAPATCH FAILS WITH SP2-0768 IF NLS_LANGUAGE IS NOT SET TO AMERICANwhic ...

  3. oozie.log报提示:org.apache.oozie.service.ServiceException: E0104错误 An Admin needs to install the sharelib with oozie-setup.sh and issue the 'oozie admin' CLI command to update sharelib

    不多说,直接上干货! 问题详情 关于怎么启动oozie,我这里不多赘述. Oozie的详细启动步骤(CDH版本的3节点集群) 然后,我在查看 [hadoop@bigdatamaster logs]$ ...

  4. gbk编码文件传输json实例

    cline.php <?php $str='此地无银三百两'; $str = iconv('gbk', 'utf-8', $str); //Json只支持utf-8编码,如果不进行转码的话,服务 ...

  5. python工具之exccel模板生成报表

    from Db import Db from log import log import xlwt import xlrd from xlutils.copy import copy import s ...

  6. 9.JAVA-抽象类定义

    1.抽象类 抽象类,用来表示一个抽象概念. 是一种只能定义类型,而不能产生对象的类,所以定义了抽象类则必须有子类的出现. 抽象类的好处在于能够明确地定义子类需要覆写的方法 抽象类需要使用abstrac ...

  7. 【转】深入理解Android中的SharedPreferences

    SharedPreferences作为Android中数据存储方式的一种,我们经常会用到,它适合用来保存那些少量的数据,特别是键值对数据,比如配置信息,登录信息等.不过要想做到正确使用SharedPr ...

  8. T4312 最大出栈顺序

    题目描述 给你一个栈和n个数,按照n个数的顺序入栈,你可以选择在任何时候将数 出栈,使得出栈的序列的字典序最大. 输入输出格式 输入格式: 输入共2行. 第一行个整数n,表示入栈序列长度. 第二行包含 ...

  9. DOM编程练习(慕课网题目)

    编程练习 制作一个表格,显示班级的学生信息. 要求: 1. 鼠标移到不同行上时背景色改为色值为 #f2f2f2,移开鼠标时则恢复为原背景色 #fff 2. 点击添加按钮,能动态在最后添加一行 3. 点 ...

  10. oss图片上传失败

    在生产上跑的正常代码,新搭了个测试环境,发现oss上传失败! 开始分析oss是否有以各种类似于白名单的功能,不认识测试域名导致的...结果不是! 改变访问类型 因为oss节点Endpoint是在杭州, ...