C#字串操作總結

mnhdd發表於2015-06-25

1、C#判斷字串為空最通用的方法就是IsNullOrEmpty()無論是"", string.Empty還是null。

     如果字串初始化為null,則不能使用test3.Length == 0進行判斷。對於"",和string.Empty 使用s.Length == 0,s == string.Empty 和s == ""都可以,這裡面不討論效能問題

2、字串操作函式

     

C#字串函式大全

C#字串函式大全將包括Len Len(string|varname) Trim Trim(string) Ltrim Ltrim(string)等多項內容

LenLen(string|varname)返回字串內字元的數目,或是儲存一變數所需的位元組數。

TrimTrim(string)將字串前後的空格去掉

LtrimLtrim(string)將字串前面的空格去掉

RtrimRtrim(string)將字串後面的空格去掉

MidMid(string,start,length)string字串的start字元開始取得length長度的字串,如果省略第三個參數列示從start字元開始到字串結尾的字串

LeftLeft(string,length)string字串的左邊取得length長度的字串

RightRight(string,length)string字串的右邊取得length長度的字串

LCaseLCase(string)string字串裡的所有大寫字母轉化為小寫字母

UCaseUCase(string)string字串裡的所有大寫字母轉化為大寫字母

StrCompStrComp(string1,string2[compare])返回string1字串與string2字串的比較結果,如果兩個字串相同,則返回0,如果小於則返回-1,如果大於則返回1

InStrInStr(string1,string2[,compare])返回string1字串在string2字串中第一次出現的位置

SplitSplit(string1,delimiter[,count[,start]])將字串根據delimiter拆分成一維陣列,其中delimiter用於標識子字串界限。如果省略,使用空格("")作為分隔符。

 

string[] rq1=new string[3];                   //此方法比較簡潔(分割字串)

             rq1 = rq.Split('-');                        //單個字元作為分隔符

           // rq1 = rq.Split(new char[] {'-','-'});        多個字元作為分隔符

 

count返回的子字串數目,-1指示返回所有子字串。

start1執行文字比較;如果為0或者省略執行二進位制比較。

ReplaceReplace(expression,find,replacewith[,compare[,count[,start]]])返回字串,其中指定數目的某子字串(find)被替換為另一個子字串(replacewith)

C#字串函式大全1Len函式示例:

下面的示例利用Len函式返回字串中的字元數目:

Dim MyString MyString = Len("VBSCRIPT") ''MyString 包含 8。 C#字串函式大全2TrimLtrimRtrim函式示例:

下面的示例利用LTrim,RTrim,Trim函式分別用來除去字串開始的空格、尾部空格、

開始和尾部空格:

Dim MyVar MyVar = LTrim(" vbscript ") ''MyVar 包含 "vbscript "。 MyVar = RTrim(" vbscript ") ''MyVar 包含 " vbscript"。 MyVar = Trim(" vbscript ") ''MyVar 包含"vbscript"。 C#字串函式大全3Mid函式示例:

下面的示例利用Mid函式返回字串中從第四個字元開始的六個字元:

DimMyVar

MyVar=Mid("VB指令碼isfun!",4,6)''MyVar包含"Script"

C#字串函式大全4Left函式示例:

下面的示例利用Left函式返回MyString的左邊三個字母:

Dim MyString, LeftString MyString = "VBSCript" LeftString = Left(MyString, 3) ''LeftString 包含 "VBS C#字串函式大全5Right函式示例:

下面的示例利用Right函式從字串右邊返回指定數目的字元:

Dim AnyString, MyStr AnyString = "Hello World" ''定義字串。 MyStr = Right(AnyString, 1) ''返回 "d"。 MyStr = Right(AnyString, 6) '' 返回 " World"。 MyStr = Right(AnyString, 20) '' 返回 "Hello World"。 C#字串函式大全6LCase函式示例:

下面的示例利用LCase函式把大寫字母轉換為小寫字母:

Dim MyString Dim LCaseString MyString = "VBSCript" LCaseString=LCase(MyString)''LCaseString包含"vbscript"

C#字串函式大全7UCase函式示例:

下面的示例利用UCase函式返回字串的大寫形式:

DimMyWord

MyWord=UCase("HelloWorld")''返回"HELLOWORLD"

C#字串函式大全8StrComp函式示例:

下面的示例利用StrComp函式返回字串比較的結果。如果第三個引數為1執行文字比較;如果第三個引數為0或者省略執行二進位制比較。

DimMyStr1,MyStr2,MyComp

MyStr1="ABCD":MyStr2="abcd"''定義變數。

MyComp=StrComp(MyStr1,MyStr2,1)''返回0

MyComp=StrComp(MyStr1,MyStr2,0)''返回-1

MyComp=StrComp(MyStr2,MyStr1)''返回1

C#字串函式大全9InStr示例:

下面的示例利用InStr搜尋字串:

DimSearchString,SearchChar,MyPos

SearchString="XXpXXpXXPXXP"

SearchChar="P"

MyPos=Instr(SearchString,SearchChar)''返回9.

注意:返回的不是一個字串在另一個字串中第一次出現的字元位置,而是位元組位置。

C#字串函式大全10Split函式示例:

DimMyString,MyArray,Msg

MyString="VBScriptXisXfun!"

MyArray=Split(MyString,"x",-1,1)

''MyArray(0)contains"VBScript".

''MyArray(1)contains"is".

''MyArray(2)contains"fun!".

Response.Write(MyArray(0))

C#字串函式大全11Replace函式示例:

Replace("ABCD","BC","12")''得到A12D

 

 

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 格式化數字
 格式字元    說明和關聯屬性

cC       貨幣格式。
 dD       十進位制格式。
 eE       科學計數(指數)格式。
 fF       固定點格式。
 gG       常規格式。
 nN       數字格式。
 rR       往返格式,確保將已轉換成字串的數字轉換回數字時具有與原數字相同的值。
 xX       十六進位制格式。

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));cC       貨幣格式。
dD       十進位制格式。
eE       科學計數(指數)格式。
fF       固定點格式。
gG       常規格式。
nN       數字格式。
rR       往返格式,確保將已轉換成字串的數字轉換回數字時具有與原數字相同的值。
xX       十六進位制格式。
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));
 格式化字串“ 把列舉顯示為一個字串。

介紹一下常用的幾個功能:

Compare(str1,str2)——比較兩個字串 str1,str2的大小,如果大於返回正數,等於返回0,小於返回負數!

IndexOf——定位字串中第一次出現某個給定字串的位置
PadLeftPadRight——在字串的開始和結尾用指定的字元填充字串
ToLowerToUpper把字串轉換為小寫或大寫形式
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物件時可以指定記憶體的記憶體容量,如果不指定系統就會根據物件初始化時的字串長度來確定。它有兩個主要引數LengthCapacity分別表示字串的實際長度和字串佔據的記憶體空間長度。對字串的修改就是在這個記憶體中進行的,大大提高了新增和替換的的效率。
如定義: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.MaxValue20億)
     可以在使用過程中定義sb.MaxCapacity=value;
     sb.Append(),給當前字串追加字串。
     sb.AppendFormat()——新增特定格式的字串
     sb.Insert()——插入一個子字串
     sb.Remove()——從當前字串刪除字元
     sb.Replace()——替換字串中指定的字元
     sb.ToString()——sb轉化為String 物件

 

 

相關文章