細節雜記 移除字串中的字元 remove indexof 字串大小比較 compare

SieSteven發表於2015-03-14
string a = new string();
...//這裡設定字串a的值

//查詢"string"並刪除
int i = a.IndexOf("string");

a=a.Remove(i, "string".Length); // 結果在返回值中


string str1="how are you";
str1.IndexOf("is")這個的結果應該是多少?


-1 
沒有找到就返回-1 找到了返回索引


二、 字串比較

  1. 1:要判斷2個字串變數是否相等,最高效的方法是看它們是否指向相同的記憶體地址。前面使用RefernceEquals方法來比較。如果2個變數指向的是不同的記憶體地址,那麼就需要逐字元的比較2個字串的變數,才能確認它們是否相等。由於逐字比較會花費大量的時間,降低效能。所以.NET提供了String.Equals方法來優化比較過程該方法能自動地完成引用比較和值比較。

    string str1="abc";

    string str2="abc";

    string str3=String.Copy(str2);

    string str4="abc";

    Console.WriteLine(String.Equals(str1,str2)); //true;

    Console.WriteLine(str1.Equals(str3));        //true;

    Console.WriteLine(str1 == str3);             //true;

    Console.WriteLine(str1 == str4);             //false;

    其實“==”操作符,它實際上在底層是呼叫Equals方法,這是完成比較的一種簡捷方式。雖然Equals方法已經滿足了大多數的比較的需要,但是此方法沒有過載方法,不支援區分大小寫,和考慮每個國家的文化因素

  2. 2:String.Compare是一個比較靈活的比較方法,由於考慮到大小寫或文化因素,就可以使用此方法。因為它有許多過載的形式,可以接受大小寫或文化的引數,也支援子串比較。

    語法如下;

       int Compare(string str1,string str2);//指定要比較的字串;

       Compare(string str1,string str2,bool IgnoreCase);//bool IgnoreCase預設為false,如果是true,則不區分大小寫的比較。

       Compare(string str1,string str2,bool IgnoreCase,CulureInfo ci);//CulureInfo ci,要使用的文化。

       Compare(string str1,int index1,string str2,int index2,int len);//index1和index2分別表示str1和str2的起始位置。

    Compare返回一個表示比較結果的整數值,兩個字元相同,則返回0;如果第一個字串小宇第二個字串,則返回小於0;如果第一個字串大於第二字串,返回值大於0;

    int result;

    string str1="ABC";

    string str2="abc";

    result=string.Compare(str1,str2);//返回1,因為A比a大;

    result=string.Compare(str1.str2,false);//返回1,區分大小寫;

    result=string.Compare(str1,str2,ture);//返回0,不區分大小寫;

       在編寫程式是,要考慮的文化因素影響。.NET給各種文化的分別提供了一組準則,在執行Compare方法時,CLR會檢查相關文化,並使用相對應的準則。Compare方法提供了一個CultureInfo物件引數。

      CultureInfo ci = new CultureInfo("cs-cz");

    要明確的指定一個預設文化或者無文化資訊,CultureInfo類提供了2個成員屬性,CurrentCulture(當前執行緒相關文化)和InvariantCulure(忽略文化因素),可以作為引數傳遞給方法。這樣使得程式具有自描性,可以清楚的這些方法是否受到文化的影響。

  3. 3:String.CompareOrdinal是對嚴格基於字元的序數值完成比較。它其實是使用一種簡單的演算法來比較2個字串的Unicode值。如果第一個字串小於第二個字串,則返回小於0;如果是2個字串相等,返回0;如果第一個字串大於第二字串,則返回大於0的值。

    string str1=“Abc”;

    string str2=“abc”;

    result=string.Compare(str1,str2,false,CultureInfo.InvariantCulture);//返回1,A比a大,不受文化影響。

    result=string.CompareOrdinal(str1,str2);返回負數-20。因為CompareOrdinal比較的是底層的Unicode值。A(U+0041)小於a(U+0061),所以第一個字串小於第二個字串


相關文章