zoukankan      html  css  js  c++  java
  • C# 字符串操作(转)

    1、从字符串中提取子串
    StringBuilder 类没有支持子串的方法,因此必须用String类来提取。
    string mystring="My name is ynn.";
    //Displays "name is ynn."
    Console.WriteLine(mystring.Substring( 3 ));
    //Displays "ynn"
    Console.WriteLine(mystring.Substring( 11,3 ));

    2、比较字符串
    String 类有四种方法:Compare( )、CompareTo( )、CompareOrdinal( )、Equals( )。
    Compare( )方法是CompareTo( )方法的静态版本。只要使用“=”运算符,就会调用Equals( )方法,的以Equals( )方法与“=”是等价的。CompareOrdinal( )方法对两个字符串比较不考本地语言与文件。
    示例:
    int result;
    bool bresult;
    s1="aaaa";
    s2="bbbb";
    //Compare( )method
    //result值为“0”表示等,小于零表示 s1 < s2,大于零表示 s1 > s2
    result=String.Compare(s1,s2);
    result=s1.CompareTo( s2 );
    result=String.CompareOrdinal(s1,s2);
    bresult=s1.Equals( s2 );
    bresult=String.Equals( s1,s2 );
    一个例外情况是,两个字符串都是内置的,并相等,静态方法要快得多。

    3、字符串格式化

    3.1 格式化数字
    格式字符    说明和关联属性


    c、C       货币格式。
    d、D       十进制格式。
    e、E       科学计数(指数)格式。
    f、F       固定点格式。
    g、G       常规格式。
    n、N       数字格式。
    r、R       往返格式,确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。
    x、X       十六进制格式。


    double val=Math.PI;
    Console.WriteLine(val.ToString( ));  //displays 3.14159265358979
    Console.WriteLine(val.ToString("E"));//displays 3.141593E+000
    Console.WriteLine(val.ToString("F3");//displays 3.142
    int val=65535;
    Console.WriteLine(val.ToString("x"));  //displays ffff
    Console.WriteLine(val.ToString("X"));  //displays FFFF
    Single val=0.123F;
    Console.WriteLine(val.ToString("p"));  //displays 12.30 %
    Console.WriteLine(val.ToString("p1"));  //displays 12.3 %
    默认格式化会在数字和百分号之间放入一个空格。定制方法如下:
    其中NumberFormatInfo类是System.Globalization命名空间的一个成员,因此该命名空间必须导入到程序中。
    Single val=0.123F;
    object myobj=NumberFormatInfo.CurrentInfo.Clone( ) as NumberFormatInfo;
    NumberFormatInfo myformat=myobj as NumberFormatInfo;
    myformat.PercentPositivePattern=1;
    Console.WriteLine(val.ToString("p",myformat)); //displays 12.30%;
    Console.WriteLine(val.ToString("p1",myformat)); //displays 12.3%;
    格式化具有很大的灵活性。下面的例子演示一个没有意义的货币结构:
    double val=1234567.89;
    int [] groupsize={2,1,3};
    object myobj=NumberFormatInfo.CurrentInfo.Clone( );
    NumberFormatInfo mycurrency=myobj as NumberFormatInfo;
    mycurrency.CurrencySymbol="#"; //符号
    mycurrency.CurrencyDecimalSeparator=":"; //小数点
    mycurrency.CurrencyGroupSeparator="_";  //分隔符
    mycurrency.CurrencyGroupSizes=groupsize;
    // 输出 #1_234_5_67:89
    Console.WriteLine(val.ToString("C",mycurrency));

    c、C       货币格式。
    d、D       十进制格式。
    e、E       科学计数(指数)格式。
    f、F       固定点格式。
    g、G       常规格式。
    n、N       数字格式。
    r、R       往返格式,确保将已转换成字符串的数字转换回数字时具有与原数字相同的值。
    x、X       十六进制格式。
    double val=Math.PI;Console.WriteLine(val.ToString( ));  //displays 3.14159265358979
    Console.WriteLine(val.ToString("E"));//displays 3.141593E+000
    Console.WriteLine(val.ToString("F3");//displays 3.142int val=65535;
    Console.WriteLine(val.ToString("x"));  //displays ffff
    Console.WriteLine(val.ToString("X"));  //displays FFFF
    Single val=0.123F;Console.WriteLine(val.ToString("p"));  //displays 12.30 %
    Console.WriteLine(val.ToString("p1"));  //displays 12.3 %
    默认格式化会在数字和百分号之间放入一个空格。定制方法如下:
    其中NumberFormatInfo类是System.Globalization命名空间的一个成员,因此该命名空间必须导入到程序中。
    Single val=0.123F;
    object myobj=NumberFormatInfo.CurrentInfo.Clone( ) as NumberFormatInfo;
    NumberFormatInfo myformat=myobj as NumberFormatInfo;
    myformat.PercentPositivePattern=1;
    Console.WriteLine(val.ToString("p",myformat)); //displays 12.30%;
    Console.WriteLine(val.ToString("p1",myformat)); //displays 12.3%;
    格式化具有很大的灵活性。下面的例子演示一个没有意义的货币结构:
    double val=1234567.89;
    int [] groupsize={2,1,3};
    object myobj=NumberFormatInfo.CurrentInfo.Clone( );
    NumberFormatInfo mycurrency=myobj as NumberFormatInfo;
    mycurrency.CurrencySymbol="#"; //符号
    mycurrency.CurrencyDecimalSeparator=":"; //小数点
    mycurrency.CurrencyGroupSeparator="_";  //分隔符
    mycurrency.CurrencyGroupSizes=groupsize;// 输出 #1_234_5_67:89
    Console.WriteLine(val.ToString("C",mycurrency));

    3.2 格式化日期
    输出形式取决于用户计算机的文化设置。
    using System;
    using System.Globalization;
    public class MainClass
    {
    public static void Main(string[] args) 
    {
            DateTime dt = DateTime.Now;
            String[] format = {"d","D","f","F","g","G","m","r","s","t", "T","u", "U","y","dddd, MMMM dd yyyy","ddd, MMM d ""'""yy","dddd, MMMM dd","M/yy","dd-MM-yy",};
            String date;
          for (int i = 0; i < format.Length; i++)
          {
             date = dt.ToString(format[i], DateTimeFormatInfo.InvariantInfo);
             Console.WriteLine(String.Concat(format[i], " :" , date));
          }
         }
    }
    d :07/11/2004    <=======输出
    D :Sunday, 11 July 2004
    f :Sunday, 11 July 2004 10:52
    F :Sunday, 11 July 2004 10:52:36
    g :07/11/2004 10:52
    G :07/11/2004 10:52:36
    m :July 11
    r :Sun, 11 Jul 2004 10:52:36 GMT
    s :2004-07-11T10:52:36
    t :10:52
    T :10:52:36
    u :2004-07-11 10:52:36Z
    U :Sunday, 11 July 2004 02:52:36
    y :2004 July
    dddd, MMMM dd yyyy :Sunday, July 11 2004
    ddd, MMM d "'"yy :Sun, Jul 11 '04
    dddd, MMMM dd :Sunday, July 11
    M/yy :7/04
    dd-MM-yy :11-07-04

    3.3 格式化枚举
    enum classmen
    {
      ynn=1,
      yly=2,
      css=3,
      C++=4
    }
    获取枚举字符串信息如下:
    classmen myclassmen=classmen.yly;
    Console.WriteLine(myclassmen.ToString( ));   //displays yly
    Console.WriteLine(myclassmen.ToString("d")); //displays 2
    从系统枚举中获取文本人信息如下:
    DayOfWeek day=DayOfWeek.Friday;
    //displays "Day is Friday"
    Console.WriteLine(String.Format("Day is {0:G}",day));
    格式化字符串“ G ”把枚举显示为一个字符串。

    介绍一下常用的几个功能:

    Compare(str1,str2)——比较两个字符串 str1,str2的大小,如果大于返回正数,等于返回0,小于返回负数!

    IndexOf——定位字符串中第一次出现某个给定字符串的位置
    PadLeft和PadRight——在字符串的开始和结尾用指定的字符填充字符串
    ToLower和ToUpper把字符串转换为小写或大写形式
    Trim——删除首尾空白
    String.Replace——用指定的字符替换字符串中的指定字符。


    C#中字符串的建立过程:
    例如定义变量 strT="Welcome to ";
    strT+="www.csdn.net";
    程序首先创建一个System.String 类型的对象并初始化为“Welcome to”。此时编译程度会分配足够的内存来保存这个文本串。并用变量strT来表示这个实例。当执行strT+="www.csdn.net"时,系统会创建一个新的实例,并分配足够的内存来保存复合后的文本。然后用变量strT来表示这个新的字符
    串,就的字符串被撤消。当要进行大规模的字符替换与调整操作时,使用字符串来操作将严重影响性能。在这中情况下就可以用System.Text.StringBuilder类。
     
        StringBuilder类并没有String 类的功能强大,只提供基本的替换和添加和删除字符串中的文本,但它的工作效率非常高,当定义StringBuilder对象时可以指定内存的内存容量,如果不指定系统就会根据对象初始化时的字符串长度来确定。它有两个主要参数Length和Capacity分别表示字符串的实际长度和字符串占据的内存空间长度。对字符串的修改就是在这个内存中进行的,大大提高了添加和替换的的效率。
    如定义:StringBuilder sb=new StringBuilder("Hello,Welcome",100);//初始化对象并设置初始容量为100
           sb.Append(" to www.csdn.net");
           sb.Replace(old,new);//将old替换为new,作用与String.Replace()一样只是不需要在过程中复制字符。
    StringBuilder的成员:
         StringBuilder sb=new StringBuilder("www.csdn.net");//定义初值为www.csdn.net的对象。
         StringBuilder sb=new StringBuilder(20);初始化容量为20的空对象。
         另外StringBuilder还有MaxCapacity属性用来限定对象可以使用的最大容量。默认大约是int.MaxValue(20亿)
         可以在使用过程中定义sb.MaxCapacity=value;
         sb.Append(),给当前字符串追加字符串。
         sb.AppendFormat()——添加特定格式的字符串
         sb.Insert()——插入一个子字符串
         sb.Remove()——从当前字符串删除字符
         sb.Replace()——替换字符串中指定的字符
         sb.ToString()——将sb转化为String 对象

  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/cxd4321/p/2579833.html
Copyright © 2011-2022 走看看