现在的位置: 首页 > 综合 > 正文

字符串操作

2018年04月03日 ⁄ 综合 ⁄ 共 14521字 ⁄ 字号 评论关闭

一 c#数组申请及使用

 字符串操作(取当前时间)
string time=convert.tostring(DateTime.Today).split( new char []{' '});    textbox1.text=time[0]; 以空格作为分界点;
数组概述
C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。
声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。
int[] table; // not int table[];
另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。
int[] numbers; // declare numbers as an int array of any size
numbers = new int[10]; // numbers is a 10-element array
numbers = new int[20]; // now it's a 20-element array
声明数组
C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:
一维数组:int[] numbers;
多维数组:string[,] names;
数组的数组(交错的):byte[][] scores;
声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(本教程稍后讨论),必须进行实例化。下面的示例展示如何创建数组:
一维数组:int[] numbers = new int[5];
多维数组:string[,] names = new string[5,4];
数组的数组(交错的):byte[][] scores = new byte[5][]; for (int x = 0; x < scores.Length; x++) {scores[x] = new byt[4];
}
还可以有更大的数组。例如,可以有三维的矩形数组:int[,,] buttons = new int[4,5,3];
甚至可以将矩形数组和交错数组混合使用。例如,下面的代码声明了类型为 int 的二维数组的三维数组的一维数组int[][,,][,] numbers; 
初始化数组
C# 通过将初始值括在大括号 ({}) 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。
注意 如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null。
一维数组
int[] numbers = new int[5] {1, 2, 3, 4, 5};
string[] names = new string[3] {"Matt", "Joanne", "Robert"};
可省略数组的大小,如下所示:
int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Matt", "Joanne", "Robert"};
如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:
int[] numbers = {1, 2, 3, 4, 5};
string[] names = {"Matt", "Joanne", "Robert"};
多维数组
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };
可省略数组的大小,如下所示:
int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };
如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };
交错的数组(数组的数组)
可以像下例所示那样初始化交错的数组:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
可省略第一个数组的大小,如下所示:
int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };-或-
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
请注意,对于交错数组的元素没有初始化语法。
访问数组成员
访问数组成员可以直接进行,类似于在 C/C++ 中访问数组成员。例如,下面的代码创建一个名为 numbers 的数组,然后向该数组的第五个元素赋以 5:
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5;
下面的代码声明一个多维数组,并向位于 [1, 1] 的成员赋以 5:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;
下面声明一个一维交错数组,它包含两个元素。第一个元素是两个整数的数组,第二个元素是三个整数的数组:
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}};
下面的语句向第一个数组的第一个元素赋以 58,向第二个数组的第二个元素赋以 667:
numbers[0][0] = 58;
numbers[1][1] = 667;
数组是对象
在 C# 中,数组实际上是对象。System.Array 是所有数组类型的抽象基类型。可以使用 System.Array 具有的属性以及其他类成员。这种用法的一个示例是使用“长度”(Length) 属性获取数组的长度。下面的代码将 numbers 数组的长度(为 5)赋给名为 LengthOfNumbers 的变量:
int[] numbers = {1, 2, 3, 4, 5};
int LengthOfNumbers = numbers.Length;
System.Array 类提供许多有用的其他方法/属性,如用于排序、搜索和复制数组的方法。
对数组使用 foreach
C# 还提供 foreach 语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,下面的代码创建一个名为 numbers 的数组,并用 foreach 语句循环访问该数组:
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers){System.Console.WriteLine(i);}
由于有了多维数组,可以使用相同方法来循环访问元素,例如:
int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}};
foreach(int i in numbers){Console.Write("{0} ", i);}
该示例的输出为: 9 99 3 33 5 55
不过,由于有了多维数组,使用嵌套 for 循环将使您可以更好地控制数组元素

二 字符串操作常用的函数及例子

 

1.C#字符串分割

  1. string url = "http://asdfsfd asdf asdfsdf";
  2. string[] sss = GetString(url," ");
  3. foreach(string str in sss)
  4. {
  5. Response.Write(str.ToString() +" ");
  6. }
  7. private string[] GetString(string str,string cutStr)
  8. {
  9. char[] cutChar = cutStr.ToCharArray();
  10. string[] sArray = str.Split(cutChar);
  11. return sArray;
  12. }

2.C#字符串截取

  1. public static string GetFirstString(string stringToSub, int length)
  2. {
  3. Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);
  4. char[] stringChar = stringToSub.ToCharArray();
  5. StringBuilder sb = new StringBuilder();
  6. int nLength = 0;
  7. bool isCut=false;
  8. for(int i = 0; i < stringChar.Length; i++)
  9. {
  10. if (regex.IsMatch((stringChar[i]).ToString()))
  11. {
  12. sb.Append(stringChar[i]);
  13. nLength += 2;
  14. }
  15. else
  16. {
  17. sb.Append(stringChar[i]);
  18. nLengthnLength = nLength + 1;
  19. }
  20. if (nLength > length)
  21. {
  22. isCut=true;
  23. break;
  24. }
  25. }
  26. if(isCut)
  27. return sb.ToString()+"...";
  28. else
  29. return sb.ToString();
  30. }

3.取子串函数SubString

  1. string tmp2 = tmp1.SubString(0,3);
  2. 相当于vb.net中的mid
  3. tring str="abcdefg";
  4. string strstr1=str.Substring(2,3);//str1="cde"

4.C#中有什么函数可以判断某一C#字符串中是否存在着某一字符?如:"akkk*kkk"是否有“*”?

  1. string s = "akkk*kkk";
  2. int i = s.IndexOf("*");
  3. if( i != -1) 包含
  4. else 不包含

5.右对齐此实例中的字符,在左边用指定的 Unicode 字符填充以达到指定的总长度。

  1. public string PadLeft(int, char);
  2. str = "256";
  3. strstr = str.PadLeft(5,"0"); //str = "00256"

 

一、string关键字与StringBuilder类

    C# 字符串是使用 string 关键字声明的一个字符数组。字符串是使用引号声明的,如下例所示:

string s = "Hello, World!";

    字符串对象是“不可变的”,即它们一旦创建就无法更改。对字符串进行操作的方法实际上返回的是新的字符串对象。因此,出于性能方面的原因,大量的连接或其他涉及字符串的操作应当用 StringBuilder 类执行,如下所示:

System.Text.StringBuilder sb = new System.Text.StringBuilder();

sb.Append("one ");

sb.Append("two ");

sb.Append("three");

string str = sb.ToString();

二、字符串使用

1、转移字符“/”

    字符串中可以包含转义符,如“/n”(新行)和“/t”(制表符)。

    如果希望包含反斜杠,则它前面必须还有另一个反斜杠,如“//”。

2、“@”符号

    @ 符号会告知字符串构造函数忽略转义符和分行符。

    因此,以下两个字符串是完全相同的:

        string p1 = "////My Documents//My Files//";

        string p2 = @"http://www.cnblogs.com/xianspace/admin/file://my/ Documents/My Files/";

3、ToString()

    如同所有从 Object 派生的对象一样,字符串也提供了 ToString 方法,用于将值转换为字符串。此方法可用于将数值转换为字符串,如下所示:

int year = 1999;

string msg = "Eve was born in " + year.ToString();

System.Console.WriteLine(msg);  // outputs "Eve was born in 1999"

    另外,可以通过参数格式化ToString()的显示输出。如,对于时间类型格式,可以通过ToString()方法自定义时间显示格式。如:

System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");

//outputs "2009-03-11 18:05:16.345"

//"MM":指定月份为2位字符串,不足2位则前方补"0";"M":为月份数值转换的字符串;

//"HH":表示24小时制的小时;"hh"表示12小时制的小时;

4、SubString()

    格式:Substring(int startindex, int len)

    用于获取源字符串指定起始位置startindex,指定长度len的字符串。

    参数Startindex索引从0开始,且最大值必须小于源字符串的长度,否则会编译异常;

参数len的值必须不大于源字符串索引指定位置开始,之后的字符串字符总长度,否则会出现异常;

示例:

    string s4 = "Visual C# Express";

    System.Console.WriteLine(s4.Substring(7, 2));         // outputs "C#" ,C为第八个字符

    System.Console.WriteLine(s4.Replace("C#", "Basic"));  // outputs "Visual Basic Express"

5、Replace()

    格式:Replace(string oldValue, string newValue)

    用于字符串中特定字符串组合的替换,即将源字符串中的所有oldValue 字符串替换为 newValue 字符串。

示例:

    string s5 = "Visual C# Express";

    System.Console.WriteLine(s5.Replace("C#","VB"));         // outputs "Visual VB Express"

6、Split()

    将字符串拆分为子字符串(如将句子拆分为各个单词)是一个常见的编程任务。Split() 方法使用分隔符(如空格字符)char 数组,并返回一个子字符串数组。您可以使用 foreach 访问此数组。

示例:

    char[] delimit = new char[] { ' ' };

    string s14 = "The cat sat on the mat.";

    foreach (string substr in s14.Split(delimit))  //使用空格拆分

    {

           System.Console.WriteLine(substr);

    }

    此代码将在单独的行上输出每个单词,如下所示:

    The

    cat

    sat

    on

    the

    mat.

    下面的代码示例演示如何使用 System.String.Split 方法分析字符串。此方法返回一个字符串数组,其中每个元素是一个单词。作为输入,Split 采用一个字符数组指示哪些字符被用作分隔符。本示例中使用了空格、逗号、句点、冒号和制表符。一个含有这些分隔符的数组被传递给 Split,并使用结果字符串数组分别显示句子中的每个单词。

示例:

1 class TestStringSplit
2
3 {
4
5     static void Main()
6
7     {
8
9         char[] delimiterChars = { ' ', ',', '.', ':', '/t' };
10
11 
12
13         string text = "one/ttwo three:four,five six seven";
14
15         System.Console.WriteLine("Original text: '{0}'", text);
16
17 
18
19         string[] words = text.Split(delimiterChars);
20
21         System.Console.WriteLine("{0} words in text:", words.Length);
22
23 
24
25         foreach (string s in words)
26
27         {
28
29             System.Console.WriteLine(s);
30
31         }
32
33     }
34
35 }
36
37 
38

输出:

Original text: 'one     two three:four,five six seven'

7 words in text:

one

two

three

four

five

six

seven

    另外,还可通过正则表达式Regex.Split()的方法,通过字符串分隔字符串。

示例:

    using System.Text.RegularExpressions; //需要引用正则表达式的命名空间   

    string str="aaajsbbbjsccc";

    string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);   //正则表达式

    // RegexOptions.IgnoreCase 表示忽略字母大小写

    foreach (string i in sArray) Response.Write(i.ToString() + "<br>");

    输出:

        aaa

        bbb

        ccc

7、Trim()

    Trim() 从当前 String 对象移除所有前导空白字符和尾部空白字符。

示例:

    string s7 = "  Visual C# Express     ";

    System.Console.WriteLine(s7);         // outputs  "  Visual C# Express     "

    System.Console.WriteLine(s7.Trim());         // outputs "Visual C# Express"

8、ToCharArray()

    格式:ToCharArray(int startindex,int len)

    用于将字符复制到字符数组。用于修改字符串等

示例:

string s8 = "Hello, World";

char[] arr = s8.ToCharArray(0, s8.Length);

foreach (char c in arr)

{

    System.Console.Write(c);  // outputs "Hello, World"

}

示例:修改字符串内容

    字符串是不可变的,因此不能修改字符串的内容。但是,可以将字符串的内容提取到非不可变的窗体中,并对其进行修改,以形成新的字符串实例。

    下面的示例使用 ToCharArray 方法来将字符串的内容提取到 char 类型的数组中。然后修改此数组中的某些元素。之后,使用 char 数组创建新的字符串实例。

class ModifyStrings

{

    static void Main()

    {

        string str = "The quick brown fox jumped over the fence";

        System.Console.WriteLine(str);

        char[] chars = str.ToCharArray();

        int animalIndex = str.IndexOf("fox");

        if (animalIndex != -1)

        {

            chars[animalIndex++] = 'c';

            chars[animalIndex++] = 'a';

            chars[animalIndex] = 't';

        }

        string str2 = new string(chars);

        System.Console.WriteLine(str2);

    }

}

输出:

The quick brown fox jumped over the fence

The quick brown cat jumped over the fence

9、利用索引访问字符串中的各个字符

    格式:str[int index]

示例:逆序排列字符串

string s9 = "Printing backwards";

for (int i = 0; i < s9.Length; i++)

{

    System.Console.Write(s9[s9.Length - i - 1]);  // outputs "sdrawkcab gnitnirP"

}

10、更改大小写,ToUpper() 和 ToLower()

    若要将字符串中的字母更改为大写或小写,可以使用 ToUpper() 或 ToLower()。如下所示:

string s10 = "Battle of Hastings, 1066";

System.Console.WriteLine(s10.ToUpper());  // outputs "BATTLE OF HASTINGS 1066"

System.Console.WriteLine(s10.ToLower());  // outputs "battle of hastings 1066"

11、比较

    比较两个字符串的最简单方法是使用 == 和 != 运算符,执行区分大小写的比较。

string color1 = "red";

string color2 = "green";

string color3 = "red";

if (color1 == color3)

{

    System.Console.WriteLine("Equal");

}

if (color1 != color2)

{

    System.Console.WriteLine("Not equal");

}

12、CompareTo()

    字符串对象也有一个 CompareTo() 方法,它根据某个字符串是否小于 (<) 或大于 (>) 另一个,返回一个整数值(小于0或大于等于0)。比较字符串时使用 Unicode 值,小写的值小于大写的值。示例:

string s121 = "ABC";

string s122 = "abc";

if (s121.CompareTo(s122) > 0)

{

    System.Console.WriteLine("Greater-than");

}

else

{

    System.Console.WriteLine("Less-than");

}

13、字符串索引 IndexOf()。

    若要在一个字符串中搜索另一个字符串,可以使用 IndexOf()。如果未找到搜索字符串,IndexOf() 返回 -1;否则,返回它出现的第一个位置的索引(从零开始)。

示例:

string s13 = "Battle of Hastings, 1066";

System.Console.WriteLine(s13.IndexOf("Hastings"));  // outputs 10 ,注意从0开始数起

System.Console.WriteLine(s13.IndexOf("1967"));      // outputs -1

    string 类型(它是 System.String 类的别名)为搜索字符串的内容提供了许多有用的方法。下面的示例使用 IndexOf、LastIndexOf、StartsWith 和 EndsWith 方法。

示例:

class StringSearch

{

    static void Main()

    {

        string str = "A silly sentence used for silly purposes.";

        System.Console.WriteLine("'{0}'",str);         //'A silly sentence used for silly purposes.'

        bool test1 = str.StartsWith("a silly");  

        System.Console.WriteLine("starts with 'a silly'? {0}", test1);   //starts with 'a silly'? False

        bool test2 = str.StartsWith("a silly", System.StringComparison.OrdinalIgnoreCase);

        System.Console.WriteLine("starts with 'a silly'? {0} (ignoring case)", test2);    //starts with 'a silly'? True (ignore case)

        bool test3 = str.EndsWith(".");

        System.Console.WriteLine("ends with '.'? {0}", test3);        //ends with '.'? True

        int first = str.IndexOf("silly");

        int last = str.LastIndexOf("silly");

        string str2 = str.Substring(first, last - first);

        System.Console.WriteLine("between two 'silly' words: '{0}'", str2);    //between two 'silly' words: 'silly sentence used for '

    }

}

输出:

'A silly sentence used for silly purposes.'

starts with 'a silly'? False

starts with 'a silly'? True (ignore case)

ends with '.'? True

between two 'silly' words: 'silly sentence used for '

三、使用 StringBuilder

    StringBuilder 类创建了一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。StringBuilder 字符串还允许您重新分配个别字符,这些字符是内置字符串数据类型所不支持的。例如,此代码在不创建新字符串的情况下更改了一个字符串的内容:

示例:

    System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");

    sb[0] = 'C';

    System.Console.WriteLine(sb.ToString());  // displays Cat: the ideal pet

    System.Console.ReadLine();

    在以下示例中,StringBuilder 对象用于从一组数值类型中创建字符串。

示例:

class TestStringBuilder

{

    static void Main()

    {

        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        // Create a string composed of numbers 0 - 9

        for (int i = 0; i < 10; i++)

        {

            sb.Append(i.ToString());

        }

        System.Console.WriteLine(sb);  // displays 0123456789

        // Copy one character of the string (not possible with a System.String)

        sb[0] = sb[9];

        System.Console.WriteLine(sb);  // displays 9123456789

    }

}

四、正则表达式

    可以使用 System.Text.RegularExpressions.Regex 类搜索字符串。这些搜索可以涵盖从非常简单到全面使用正则表达式的复杂范围。以下是使用 Regex 类搜索字符串的两个示例。有关更多信息,请参见 .NET Framework 正则表达式。

    以下代码是一个控制台应用程序,用于对数组中的字符串执行简单的不区分大小写的搜索。给定要搜索的字符串和包含搜索模式的字符串后,静态方法 System.Text.RegularExpressions.Regex.IsMatch(System.String,System.String,System.Text.RegularExpressions.RegexOptions) 执行搜索。

    在本例中,使用第三个参数指示忽略大小写。有关更多信息,请参见 System.Text.RegularExpressions.RegexOptions。

示例:

class TestRegularExpressions

{

    static void Main()

    {

        string[] sentences =

        {

            "cow over the moon",

            "Betsy the Cow",

            "cowering in the corner",

            "no match here"

        };

        string sPattern = "cow";

        foreach (string s in sentences)

        {

            System.Console.Write("{0,24}", s);

            if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))

            {

                System.Console.WriteLine("  (match for '{0}' found)", sPattern);

            }

            else

            {

                System.Console.WriteLine();

            }

        }

    }

}

输出:

       cow over the moon  (match for 'cow' found)

           Betsy the Cow  (match for 'cow' found)

  cowering in the corner  (match for 'cow' found)

           no match here

    以下代码是一个控制台应用程序,此程序使用正则表达式验证数组中每个字符串的格式。验证要求每个字符串具有电话号码的形式,即用短划线将数字分成三组,前两组各包含三个数字,第三组包含四个数字。这是通过正则表达式 ^//d{3}-//d{3}-//d{4}$ 完成的。有关更多信息,请参见正则表达式语言元素。

示例:

class TestRegularExpressionValidation

{

    static void Main()

    {

        string[] numbers =

        {

            "123-456-7890",

            "444-234-22450",

            "690-203-6578",

            "146-893-232",

            "146-839-2322",

            "4007-295-1111",

            "407-295-1111",

            "407-2-5555",

        };

        string sPattern = "^//d{3}-//d{3}-//d{4}$";

        foreach (string s in numbers)

        {

            System.Console.Write("{0,14}", s);

            if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern))

            {

                System.Console.WriteLine(" - valid");

            }

            else

            {

                System.Console.WriteLine(" - invalid");

            }

        }

    }

}

输出:

    123-456-7890 - valid

    444-234-22450 - invalid

    690-203-6578 - valid

    146-893-232 - invalid

    146-839-2322 - valid

    4007-295-1111 - invalid

    407-295-1111 - valid

    407-2-5555 - invalid

五、联接多个字符串

    有两种联接多个字符串的方法:使用 String 类重载的 + 运算符,以及使用 StringBuilder 类。+ 运算符使用方便,有助于生成直观的代码,但必须连续使用;每使用一次该运算符就创建一个新的字符串,因此将多个运算符串联在一起效率不高。

示例:

string two = "two";

string str = "one " + two + " three";

System.Console.WriteLine(str);

    尽管在代码中只出现了四个字符串,三个字符串联接在一起,最后一个字符串包含全部三个字符串,但总共要创建五个字符串,因为首先要将前两个字符串联接,创建一个包含前两个字符串的字符串。第三个字符串是单独追加的,形成存储在 str 中的最终字符串。

    也可以使用 StringBuilder 类将每个字符串添加到一个对象中,然后由该对象通过一个步骤创建最终的字符串。下面的示例对此策略进行了演示。

示例:

    下面的代码使用 StringBuilder 类的 Append 方法来联接三个字符串,从而避免了串联多个 + 运算符的弊端。

示例:

class StringBuilderTest

{

    static void Main()

    {

        string two = "two";

        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        sb.Append("one ");

        sb.Append(two);

        sb.Append(" three");

        System.Console.WriteLine(sb.ToString());

        string str = sb.ToString();

        System.Console.WriteLine(str);

    }

}

 

 

抱歉!评论已关闭.