C# 字符串處理

C# 字符串處理

        .NET 提供了String類和System.Text命名空間來高速實現字符串處理功能。

字符串比較

        比較字符串是指依照字典排序的規則,推斷兩個字符串的大小。前面的字母要小於後面的字母。String類中,常見的比較字符串的方法有Compare、CompareTo、CompareOrdinal以及Equals等。

Compare方法

        Compare方法是String類的靜態方法,用於全面比較兩個字符串對象。包括多種重載方式:
Int Compare(string strA, string strB)
Int Compare(string strA, string strB, bool ignoreCase)
Int Compare(string strA, string strB, bool ignoreCase, CultureInfo)
Int Compare(string strA, int indexA, string strB, int indexB, int length)
Int Compare(string strA, int indexA, string strB, int indexB, int length, bool ignoreCase)
        各參數的含義例如如下:
  • strA,strB--待比較的兩個字符串;
  • ignoreCase--指定是否考慮大寫和小寫,當取true時忽略大寫和小寫;
  • indexA,indexB--需要比較兩個字符串的子串時,indexA和indexB分別爲子字符串的起始位置;
  • length--待比較字符串的最大長度;
  • culture--字符串的區域性信息。
        Compare方法的返回值:若strA>strB返回正整數; 若strA=strB,返回0; 若strA<strB,返回負整數。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "你好";
            string strB = "你好嗎";
            // 字符串比較
            Console.WriteLine(string.Compare(strA, strB));
            Console.WriteLine(string.Compare(strA, strA));
            Console.WriteLine(string.Compare(strB, strA));
        }
    }
}
        輸出:

        說明:CompareOrdinal方法和Compare方法很相似,但不考慮區域性問題,如下再也不具體介紹CompareOrdinal方法。

CompareTo方法

        CompareTo方法將當前字符串對象與還有一個字符串對象做比較,做用與Compare方法相似,返回值也是一樣的。
        CompareTo方法和Compare方法差異在於:
  1. CompareTo方法不是靜態方法,可以經過一個String對象調用;
  2. CompareTo方法沒有重載形式,僅僅能依照大寫和小寫敏感的方式比較兩個整串。
        如下使用CompareTo比較兩個字符串:

string strA = "你好";
string strB = "你好嗎";
Console.WriteLine(strA.CompareTo(strB));

Equals方法

        假設兩個字符串相等,Equals()返回值爲true;不然,返回false。
string strA = "你好";
string strB = "你好嗎";
Console.WriteLine(string.Equals(strA, strB));
Console.WriteLine(strA.Equals(strB));

定位字符及子串

        定位子串是指一個字符串中尋找當中包括的子串或者某個字符,String類中常見方法包括StartsWith/EndsWith、IndexOf/LastIndexOf 以及 IndexOfAny/LastIndexOfAny。

StartsWith/EndsWith

        StartWith方法可以推斷一個字符串對象是否以還有一個子字符串開頭,假設是,返回true。
Public bool StartsWith(String value);
        當中,value表示待斷定的子字符串。
        EndsWith方法推斷一個字符串對象是否以還有一個子字符串結尾。

IndexOf/LastIndexOf

        IndexOf方法用於搜索在上一個字符串中,某個特定的字符或字符串第一次出現的位置,該方法區分大寫和小寫,並從字符串的首字符開始以0計數。假設字符串中不包括這個字符或子串,則返回-1。IndexOf主要有下面重載形式:
        定位字符
Int IndexOf(char value)
Int IndexOf(char value, int startIndex)
Int IndexOf(char value, int startIndex, int count)
        定位子串
int IndexOf(string value)
int IndexOf(string value, int startIndex)
int IndexOf(string value, int startIndex, int count)
        各參數的含義是:
  • value--帶定位的字符或子串;
  • startIndex--在總串中開始搜索的起始位置;
  • count--在總串中從起始位置開始搜索的字符數。
string strA = "Hello";
Console.WriteLine(strA.IndexOf('l'));
        同IndexOf相似,LastIndexOf方法用於搜索在一個字符串中,某個特定的字符或子串最後一次出現的位置。

IndexOfAny/LastIndexOfAny

        IndexOfAny方法功能與IndexOf相似,差異在於它可以在一個字符串中搜索一個字符數組中隨意字符第一次出現的位置。相同,該方法區分大寫和小寫,並從字符串的首字符開始以0計數。假設字符串中不包括這個字符或子串,則返回-1。
        IndexOfAny有下面重載形式:
int IndexOfAny(char[] anyOf)
int IndexOfAny(char[] anyOf, int startIndex)
int IndexOfAny(char[] anyOf, int startIndex, int count)
        各參數的含義:
  • anyOf--待定位的字符數組,方法將返回這個數組中隨意一個字符第一次出現的位置;
  • startIndex--在總串中開始搜索的起始位置;
  • count--在總串中從起始位置開始搜索的字符數。
string strA = "Hello";
char[] anyOf = { 'e', 'o' };
Console.WriteLine(Convert.ToString(strA.IndexOfAny(anyOf)));
Console.WriteLine(Convert.ToString(strA.LastIndexOfAny(anyOf)));
        同IndexOfAny相似,LastIndexOfAny用於在一個字符串中搜索一個字符數組中隨意字符最後一次出現的位置。

格式字符串

        Format方法用於建立格式化的字符串以及鏈接多個字符串對象。最常常使用的重載形式爲
public static string Format(string Format, params object[] arge);
  •         format--用於指定返回的字符串的格式;
  •         args--一系列變量參數。
string newStr = string.Format("{0},{1}!!!", strA, strB);
        在特定的應用中,Format方法也很是方便。好比,將當前時間格式爲"YYYY-MM-DD"形式:
DateTime DTA = DateTime.Now();
string strB = string.Format("{0:d}", DTA);
        說明:{0:d}表示將時間格式化爲短日期表示形式。

截取字符串

        截取字符串需要用到String類的Substring方法,該方法用來從字符傳中檢索子字符串,有下面重載形式:

從字符串中檢索子字符串,子字符串從指定的字符位置開始

public string Substring(int startIndex)
        startIndex--字符串中子字符串的起始字符位置。
        返回值:一個String對象,等於字符串中從startIndex開始的子字符串,假設startIndex等於此字符串的長度,返回Empty。

從字符串中檢索子字符串,子字符串從指定的字符位置開始且具備指定的長度

public string Substring(int startIndex, int length)
        startIndex--字符串中子字符串的起始字符位置。
        length--子字符串中的字符數。
        返回值:一個String對象,等於字符串中從startIndex開始的長度爲length的子字符串,假設startIndex等於此字符串的長度,且length爲0,返回Empty。

分隔字符串

        使用Split方法可以將一個字符串,依照某個分隔符,切割成一系列小的字符串。
        Split方法有多個重載形式,最多見的:
public string[] split(params char[] separator);
        separator--一個數組,包括分隔符。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello^^world";
            char[] separator={'^'};
            string[] splitstrings=new string[100];
            splitstrings=strA.Split(separator);
            int i= 0;
            while(i<splitstrings.Length)
            {
                Console.WriteLine("item{0}:{1}",i,splitstrings[i]);
                i++;
            }
            Console.ReadLine();
        }
    }
}
        輸出:

插入和填充字符串

        String類可以用Insert方法在字符串的任何位置插入隨意字符。而使用PadLeft/PadRight方法,可以在一個字符串的左右兩側可以進行字符填充。

Insert方法

        Insert方法用於在一個字符串的指定位置插入還有一個字符串,從而構造一個新的字符串。最常常使用的重載形式:
public string Insert(int startIndex, string value);
        startIndex--用於指定要插入的位置,索引從0開始。
        value--指定要插入的字符串。
        返回值--指定字符串的一個新String等效項,但在位置startIndex處插入value。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello^^world";
            string strB = "Good morning!";
            string newStr = strA.Insert(1, strB);
            Console.WriteLine(newStr);
            Console.ReadLine();
        }
    }
}
        輸出:

PadLeft/PadRight

        PadLeft用於在一個字符串左側進行字符填充,使其達到必定的長度。有下面重載形式:
public string PadLeft(int totalWidth)
public string PadLeft(int totalWidth, char paddingChar)
        totalWidth--指定填充後的字符長度。
        paddingChar--指定要填充的字符,假設缺省,則填充空格符號。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello^^world";
            string newStr; 
            newStr = strA.PadLeft(16, '*');
            Console.WriteLine(newStr);
            Console.ReadLine();
        }
    }
}
        輸出:

        PadRight功能相似,再也不贅述。

刪除和剪切字符串

        String類使用Remove在字符串任何位置刪除隨意長度子字符串,也可以使用Trim、TrimEnd和TrimStart剪切掉字符串中的一些特定字符串。

Remove方法

        Remove方法從一個字符串的指定位置開始,刪除指定數量的字符。最常常使用的語法格式:
Public String Remove(int startIndex, int count);
        startIndex--用於指定開始刪除的位置,索引從0開始。
        count--指定刪除的字符數量。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello^^world";
            string newStr; 
            newStr = strA.PadLeft(16, '*');
            Console.WriteLine(newStr);
            Console.WriteLine(newStr.Remove(2, 3));
            Console.ReadLine();
        }
    }
}
        輸出:

Trim方法

        有下面重載形式:

從字符串的開始位置和末尾移除空白字符的所有匹配項。

public string Trim()
        返回值--一個新String,至關於將指定字符串首位空白字符移除後造成的字符串。

從字符串的開始位置和末尾移除數組中指定的一組字符的所有匹配項

public string Trim(params char[] trimChars)
        trimChars--數組包括了指定要去掉的字符,假設缺省,則刪除空格符號)。
        返回值--從指定字符串的開始和結尾移除trimChars中字符的所有匹配項後剩餘的String。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello^^world";
            string newStr; 
            newStr = strA.PadLeft(16, '*');
            Console.WriteLine(newStr);
            char[] strB={'*','d'};
            Console.WriteLine(newStr.Trim(strB));
            Console.ReadLine();
        }
    }
}
       輸出:

TrimStart方法

        TrimStart方法用來從字符串的開始位置移除數組中指定的一組字符的所有匹配項。
public string TrimStart(params char[] trimChars)
        trimChars--數組包括了指定要去掉的字符,假設缺省,則刪除空格符號)。
        返回值--從指定字符串的開始位置移除trimChars中字符的所有匹配項後剩餘的String。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello^^world";
            char[] strB = { 'H', 'o' };
            string strC = strA.TrimStart(strB);
            Console.WriteLine(strC);
            Console.Read();
        }
    }
}
        輸出:

        PS:注意字符區分大寫和小寫。如上面改成"h",則仍然輸出Hello^^World。

TrimEnd方法

        類比TrimStart就能夠。

複製字符串

        String類包括了複製字符串的兩種方法Copy和CopyTo。

Copy方法

        若要把一個字符串賦值到還有一個字符數組中,可以使用String的靜態方法Copy來實現。
public static string Copy(string str);
        str--爲需要複製的源字符串,方法返回目標字符串。
        返回值--與str具備一樣值的新String。

CopyTo方法

        CopyTo方法功能更爲豐富,可以複製源字符串的一部分到一個字符數組中。另外,它不是靜態方法。
public void CopyTo(int sourceIndex, char[] destination, int destinationIndex, int count)
        各參數的含義:
  • sourceIndex--需要複製的字符的起始位置。
  • destination--目標字符數組。
  • destinationIndex--指定目標數組的開始存放位置。
  • count--指定要複製的字符個數。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello^^world";
            char[] strB = new char[100];
            strA.CopyTo(3, strB, 0, 3);
            Console.WriteLine(strB);
            Console.Read();
        }
    }
}
        輸出:

替換字符串

        假設要替換掉某個字符串的某些特定字符或者某個子串,可以使用Repalce方法。

Replace方法

        其語法形式主要有:
public string Replace(char oldChar,char newChar)
public string Replace(string oldValue,string newValue)
  •         oldChar--待替換的字符。
  •         oldChar--待替換的子串。
  •         newChar--替換後的新字符。
  •         newValue--替換後的新子串。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string strA = "Hello";
            string strB=strA.Replace("ll","r");
            Console.WriteLine(strB);
            Console.Read();
        }
    }
}
        輸出:

StringBuilder的定義和使用

        StringBuilder類位於System.Text命名空間下,它表示可變字符串。

StringBuilder的定義

StringBuilder myStringBuilder=new StringBuilder();
        StringBuilder的構造函數:
  • StringBuilder()--初始化StringBuilder類的新實例。
  • StringBuilder(Int32)--使用指定的容量初始化StringBuilder類的新實例。
  • StringBuilder(String)--使用指定的字符串初始化StringBuilder類的新實例。
  • StringBuilder(Int32,Int32)--初始化StringBuilder類的新實例,該類起始於指定容量並且可增加到指定的最大容量。
  • StringBuilder(String,Int32)--使用指定的字符串和容量初始化StringBuilder類的新實例。
  • StringBuilder(String,Int32,Int32,Int32)--使用指定的子字符串和容量初始化StringBuilder類的新實例。

StringBuilder使用

        StringBuilder類常常使用屬性說明:
  • Capacity--獲取或設置可包括在當前實例所分配的內存中的最大字符數。
  • Chars--獲取或設置此實例中指定字符位置處的字符。
  • Length--獲取或設置此實例的長度。
  • MaxCapacity--獲取此實例的最大容量。
        StringBuilder類常常使用的方法說明:
  • Append--在此實例的結尾追加指定對象的字符串表示形式。
  • AppendFormat--向此實例追加包括零個或不少其它格式規範的格式化字符串。每個格式規範由對應對象的字符串表示形式替換。
  • AppendLine--將默認的行終止符(或指定字符串的副本和默認的行終止符)追加到此實例的結尾。
  • CopyTo--將此實例的指定段中的字符拷貝到目標Char數組的指定段中。
  • EnsureCapacity--將確保StringBuilder的此實例的容量至少是指定值。
  • Insert--將指定對象的字符串表示形式插入到此實例中的指定字符位置。
  • Remove--將指定範圍的字符今後實例中移除。
  • Replace--將此實例中所有的指定字符或字符串替換爲其它的指定字符或字符串。
  • ToString--將StringBuilder的值轉化爲String。
        StringBuilder類表示值爲可變字符序列的對象,其值可變的緣由是同過追加、刪除、替換或插入字符而建立後的實例可以對其進行改動。差點兒所有改動此類的實例方法都返回對同一實例的引用。
        StringBuilder的容量是實例在不論什麼給定時間可存儲的最大字符數,並且大於或等於實例值的字符串表示形式的長度。容量可以經過Capacity屬性或EnsureCapacity方法來添加或下降,但不能小於Length屬性的值。
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder Builder = new StringBuilder("Hello", 100);
            Builder.Append(" World");
            Console.WriteLine(Builder);
            Builder.AppendFormat("{0} End", "@");
            Console.WriteLine(Builder);
            Builder.AppendLine("This is one line.");
            Console.WriteLine(Builder);
            Builder.Insert(0, "Begin");
            Console.WriteLine(Builder);
            Builder.Remove(19, Builder.Length - 19);
            Console.WriteLine(Builder);
            Builder.Replace("Begin", "Begin:");
            Console.WriteLine(Builder);
            Console.ReadLine();
        }
    }
}
        輸出:

可變字符串類StringBuilder和String的差異

        每次使用String類的方法時,都要在內存中建立一個新的字符串對象,需要爲該對象分配新的空間。在需要對字符串運行反覆改動的狀況下系統開銷可能很昂貴。假設要改動字符串而不建立新的對象,請使用StringBuilder類,避免產生過多暫時對象。
相關文章
相關標籤/搜索