19
https://msdn.microsoft.com/zh-tw/library/ms228362.aspx C# 程式設計手冊-- 字串 Visual Studio 2015 字串是型別 String 的物件,其值為文字。在內部,文字會儲存為 Char 物件的循序唯讀集合。 C# 字串尾端沒有 null 結尾字元,因此 C# 字串可以包含任何數目的內嵌 null 字元 ('\0')。 字串的 Length 屬性代表字串中包含的 Char 物件數,而不是 Unicode 字元數。若要存取字串 中個別的 Unicode 字碼指標,請使用 StringInfo 物件。 string System.String C# 中的 string 關鍵字是 String 的別名。因此,String 和 string 是對等用法,而您可以依偏好 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C# 語言可以多載部分運算子,進而簡化一般字串作業。如需關鍵字的詳細資訊,請 參閱 string (C# 參考)。如需型別和其方法的詳細資訊,請參閱 String。 宣告和初始化字串 您可以使用許多方式宣告和初始化字串,如下列範例所示: C#: // Declare without initializing. string message1; // Initialize to null. string message2 = null; // Initialize as an empty string. // Use the Empty constant instead of the literal "". string message3 = System.String.Empty; //Initialize with a regular string literal. string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0"; // Initialize with a verbatim string literal. string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0"; // Use System.String if you prefer. System.String greeting = "Hello World!";

C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

https://msdn.microsoft.com/zh-tw/library/ms228362.aspx

C# 程式設計手冊-- 字串 Visual Studio 2015

字串是型別 String 的物件,其值為文字。在內部,文字會儲存為 Char 物件的循序唯讀集合。

C# 字串尾端沒有 null 結尾字元,因此 C# 字串可以包含任何數目的內嵌 null 字元 ('\0')。

字串的 Length 屬性代表字串中包含的 Char 物件數,而不是 Unicode 字元數。若要存取字串

中個別的 Unicode 字碼指標,請使用 StringInfo 物件。

string 與 System.String

C# 中的 string 關鍵字是 String 的別名。因此,String 和 string 是對等用法,而您可以依偏好

使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。

除此之外,C# 語言可以多載部分運算子,進而簡化一般字串作業。如需關鍵字的詳細資訊,請

參閱 string (C# 參考)。如需型別和其方法的詳細資訊,請參閱 String。

宣告和初始化字串

您可以使用許多方式宣告和初始化字串,如下列範例所示:

C#:

// Declare without initializing.

string message1;

// Initialize to null.

string message2 = null;

// Initialize as an empty string.

// Use the Empty constant instead of the literal "".

string message3 = System.String.Empty;

//Initialize with a regular string literal.

string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";

// Initialize with a verbatim string literal.

string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";

// Use System.String if you prefer.

System.String greeting = "Hello World!";

Page 2: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

// In local variables (i.e. within a method body)

// you can use implicit typing.

var temp = "I'm still a strongly-typed System.String!";

// Use a const string to prevent 'message4' from

// being used to store another string value.

const string message4 = "You can't get rid of me!";

// Use the String constructor only when creating

// a string from a char*, char[], or sbyte*. See

// System.String documentation for details.

char[] letters = { 'A', 'B', 'C' };

string alphabet = new string(letters);

請注意,除了使用字元陣列初始化字串之外,其他情況下並不是使用 new 運算子來建立字串物

件。

使用 Empty 常數值初始化字串,可以建立字串長度為零的新 String 物件。零長度字串的字串常

值 (String Literal) 表示為 ""。藉由使用 Empty 值而非 null 來初始化字串,可以降低發

生 NullReferenceException 的機會。請在嘗試存取字串值前,先使

用 IsNullOrEmpty(String) 方法驗證該值。

字串物件的不變性

字串物件是「不可變」(Immutable):一旦建立就無法變更。看起來好像會修改字串的所

有 String 方法和 C# 運算子,其實是傳回新字串物件的結果。下列範例中,在串連 s1 和 s2 的

內容以構成單一字串時,並不會修改這兩個原始字串。 += 運算子會建立包含組合內容的新字

串。該新物件會指派給變數 s1,並會將指派給 s1 的原始物件釋放以供記憶體回收,這是因為

沒有其他的變數會參考到該原始物件。

C#

string s1 = "A string is more ";

string s2 = "than the sum of its chars.";

// Concatenate s1 and s2. This actually creates a new

// string object and stores it in s1, releasing the

// reference to the original object.

s1 += s2;

System.Console.WriteLine(s1);

// Output: A string is more than the sum of its chars.

Page 3: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

因為字串的「修改」實際上是新字串的建立,所以在建立字串參考時,您必須特別小心。如果您

建立字串的參考,然後「修改」原始字串,此參考將會繼續指向原始的物件,而不是指向修改該

字串後所建立的新物件。下列程式碼會說明這個行為:

C#:

string s1 = "Hello ";

string s2 = s1;

s1 += "World";

System.Console.WriteLine(s2);

//Output: Hello

規則和逐字翻譯字串的常值

在必須內嵌 C# 所提供的逸出字元 (Escape Character) 時,請使用規則字串常值,如下列範例

所示:

C#

string columns = "Column 1\tColumn 2\tColumn 3";

//Output: Column 1 Column 2 Column 3

string rows = "Row 1\r\nRow 2\r\nRow 3";

/* Output:

Row 1

Row 2

Row 3

*/

string title = "\"The \u00C6olean Harp\", by Samuel Taylor Coleridge";

//Output: "The Æolean Harp", by Samuel Taylor Coleridge

在字串文字包含反斜線字元時,例如檔案路徑,為了方便好讀,請使用逐字翻譯字串。因為逐字

翻譯字串會保留字串文字中的新行字元,所以可以用來初始化多行字串。請使用雙引號內嵌逐字

翻譯字串中的引號。下列範例顯示逐字翻譯字串的一些常見用法:

C#

string filePath = @"C:\Users\scoleridge\Documents\";

//Output: C:\Users\scoleridge\Documents\

string text = @"My pensive SARA ! thy soft cheek reclined

Thus on mine arm, most soothing sweet it is

To sit beside our Cot,...";

/* Output:

My pensive SARA ! thy soft cheek reclined

Thus on mine arm, most soothing sweet it is

To sit beside our Cot,...

*/

Page 4: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

string quote = @"Her name was ""Sara.""";

//Output: Her name was "Sara."

字串逸出序列

逸出序列 字元名稱 Unicode 編碼

\' 單引號 0x0027

\" 雙引號 0x0022

\\ 反斜線 0x005C

\0 Null 0x0000

\a 警示 0x0007

\b 退格鍵 0x0008

\f 換頁字元 0x000C

\n 新行 0x000A

\r 歸位字元 0x000D

\t 水平 Tab 0x0009

\U Surrogate 字組的 Unicode 逸出序列 \Unnnnnnnn

\u Unicode 逸出序列 \u0041 = "A"

\v 垂直 Tab 0x000B

\x 類似 "\u" 的 Unicode 逸出序列,但具有可變

長度

\x0041 = "A"

注意事項:在編譯時期,逐字翻譯字串會轉換為一般字串再加上所有相同的逸出序列。因此,

如果在偵錯工具監看式視窗中檢視逐字翻譯字串,就會看到編譯器加入的逸出字元,而不是原

始程式碼中的逐字翻譯版本。例如,逐字翻譯字串 @"C:\files.txt" 在監看式視窗中會顯示為

"C:\\files.txt"。

Page 5: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

格式字串

格式字串 (Format String) 這種字串的內容,可以在執行階段動態決定。建立格式字串的方式,

是藉由使用靜態 Format 方法,並以大括號內嵌要在執行階段以其他值取代的替代符號

(Placeholder)。下列範例會使用格式字串,以輸出迴圈 (Loop) 中每次反覆運算的結果。

C#

class FormatString

{

static void Main()

{

// Get user input.

System.Console.WriteLine("Enter a number");

string input = System.Console.ReadLine();

// Convert the input string to an int.

int j;

System.Int32.TryParse(input, out j);

// Write a different string each iteration.

string s;

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

{

// A simple format string with no alignment formatting.

s = System.String.Format("{0} times {1} = {2}", i, j, (i * j));

System.Console.WriteLine(s);

}

//Keep the console window open in debug mode.

System.Console.ReadKey();

}

}

WriteLine 方法有一個多載會採用格式字串做為參數。因此,您只要內嵌格式字串常值,而不用

明確呼叫方法。然而,如果是使用 WriteLine 方法在 Visual Studio [輸出] 視窗中顯示偵錯輸

出,則必須明確呼叫 Format 方法,因為 WriteLine 只接受字串,而非格式字串。如需格式字

串的詳細資訊,請參閱.NET Framework 中的格式化類型。

Page 6: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

子字串

子字串是包含在字串中的任何字元序列。使用 Substring 方法可以從原始字串的一部分建立新

字串。藉由使用 IndexOf 方法,您可以搜尋子字串的一個或多個出現項目。使用 Replace 方法

則會以新字串取代指定子字串的所有出現項目。跟 Substring 方法一樣,Replace 實際上會傳

回新字串,而不會修改原始字串。如需詳細資訊,請參閱 如何:使用字串方法搜尋字串 (C# 程

式設計手冊) 和 如何:修改字串內容 (C# 程式設計手冊)。

C#

string s3 = "Visual C# Express";

System.Console.WriteLine(s3.Substring(7, 2));

// Output: "C#"

System.Console.WriteLine(s3.Replace("C#", "Basic"));

// Output: "Visual Basic Express"

// Index values are zero-based

int index = s3.IndexOf("C");

// index = 7

存取個別字元

您可以使用陣列標記法搭配索引值,取得個別字元的唯讀存取,如下列範例所示: C# string s5 = "Printing backwards"; for (int i = 0; i < s5.Length; i++) { System.Console.Write(s5[s5.Length - i - 1]); } // Output: "sdrawkcab gnitnirP" 在修改字串中的個別字元時,如果 String 方法沒有提供您必須擁有的功能,則可以使用 StringBuilder 物件「就地」修改個別字元,然後再使用 StringBuilder 方法建立新字串以儲存結果。在下列範例中,假設您必須以特殊方式修改原始字串,並儲存該結果供日後使用: C# string question = "hOW DOES mICROSOFT wORD DEAL WITH THE cAPS lOCK KEY?"; System.Text.StringBuilder sb = new System.Text.StringBuilder(question); for (int j = 0; j < sb.Length; j++) { if (System.Char.IsLower(sb[j]) == true) sb[j] = System.Char.ToUpper(sb[j]); else if (System.Char.IsUpper(sb[j]) == true) sb[j] = System.Char.ToLower(sb[j]); } // Store the new string. string corrected = sb.ToString(); System.Console.WriteLine(corrected); // Output: How does Microsoft Word deal with the Caps Lock key?

Page 7: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

Null 字串和空字串

空字串是 System.String 物件的執行個體 (Instance),其中包含零個字元。空字串經常用於各

種程式設計案例,以代表空白的文字欄位。您可以在空字串上呼叫方法,因為其為有效

的 System.String 物件。空字串的初始化方式如下:

string s = String.Empty;

相較之下,null 字串不會參考 System.String 物件的執行個體,嘗試在 null 字串上呼叫方法會

導致 NullReferenceException。不過,您可以使用 null 字串與其他字串進行串連和比較作業。

下列範例說明參考 null 字串會不會導致例外狀況 (Exception) 擲回的一些案例:

C#

static void Main() { string str = "hello"; string nullStr = null; string emptyStr = String.Empty; string tempStr = str + nullStr; // Output of the following line: hello Console.WriteLine(tempStr); bool b = (emptyStr == nullStr); // Output of the following line: False Console.WriteLine(b); // The following line creates a new empty string. string newStr = emptyStr + nullStr; // Null strings and empty strings behave differently. The following // two lines display 0. Console.WriteLine(emptyStr.Length); Console.WriteLine(newStr.Length); // The following line raises a NullReferenceException. //Console.WriteLine(nullStr.Length); // The null character can be displayed and counted, like other chars. string s1 = "\x0" + "abc"; string s2 = "abc" + "\x0"; // Output of the following line: * abc* Console.WriteLine("*" + s1 + "*"); // Output of the following line: *abc * Console.WriteLine("*" + s2 + "*"); // Output of the following line: 4 Console.WriteLine(s2.Length); }

Page 8: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

使用 StringBuilder 快速建立字串

.NET 的字串作業是經過高度最佳化的,而且在絕大部分的情況下不會大幅影響到效能。然而,

在有些案例下的字串作業可能會影響到效能,例如會執行數千百次的緊密迴圈。如果程式會執行

許多字串處理,StringBuilder 類別可以建立字串緩衝區以提供更好的效能。 StringBuilder 字

串也可以讓您重新指派內建字串資料型別不支援的某些個別字元。例如,這個程式碼會在不建立

新字串的情況下變更字串內容:

C#

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the

ideal pet");

sb[0] = 'C';

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

System.Console.ReadLine();

//Outputs Cat: the ideal pet

在這個範例中,會使用 StringBuilder 物件從一組數字型別 (Numeric Type) 中建立字串:

C#

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

}

}

Page 9: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

字串、擴充方法和 LINQ

因為 String 型別會實作 IEnumerable<T>,您可以對字串使用 Enumerable 類別中定義的擴充方法。為了看起來不會過於雜亂,String 型別的 IntelliSense 會排除這些方法,但是,您仍然可以使用這些方法。您也可以對字串使用 LINQ 查詢運算式。如需詳細資訊,請參閱 LINQ and Strings。

相關主題

主題 描述

如何:修改字串內容 (C# 程式設計手冊)

提供說明如何修改字串內容的程式碼範例。

如何:串連多個字串 (C# 程式設計手冊)

說明如何使用 + 運算子和 Stringbuilder 類別,於編譯時期和執行階段聯結字串。

如何:比較字串 (C# 程式設計手冊)

說明如何執行字串的序數比較。

如何:分割字串 (C# 程式設計手冊)

包含說明如何使用 String.Split 方法剖析字串的程式碼範例。

如何:使用字串方法搜尋字串 (C# 程式設計手冊)

說明如何使用特定方法搜尋字串。

如何:使用規則運算式搜尋字串 (C# 程式設計手冊)

說明如何使用規則運算式搜尋字串。

如何:判斷字串是否表示數值 (C# 程式設計手冊)

說明如何安全剖析字串,判斷字串是否包含有效的數值。

如何:將 String 轉換為 DateTime (C# 程式設計手冊)

說明如何將字串 (例如 "01/24/2008") 轉換為 System.DateTime 物件。

.NET Framework 中的基本字串作業

提供主題連結,這些主題會使用 System.String 和 System.Text.StringBuilder 方法來執行基本字串作業。

在 .NET Framework 中剖析字串

描述如何將字元或空格插入字串中。

在 .NET Framework 中比較字串

包含如何比較字串的詳細資訊並提供 C# 和 Visual Basic 的範例。

在 .NET Framework 中使用 StringBuilder 類別

描述如何使用 StringBuilder 類別建立和修改動態字串物件。

LINQ and Strings 提供如何使用 LINQ 查詢執行各種字串作業的詳細資訊。

C# 程式設計手冊 提供說明 C# 中程式設計建構的主題連結。

Page 10: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

C#--字串處理

1、 取得子字串:String.Substring 方法 (Int32, Int32)

2、 字串中搜尋字元或子字串:String.IndexOf:

3、 字串中搜尋字元或子字串:String.LastIndexOf:

4、 串連字串陣列及分隔:String.Split

5、 字串的比較:String.Compare

6、 字串轉換大小寫:

7、 去除或添加字串前後空白字元或特定字元:

8、 字串前後添加空白字元或特定字元:

9、 在字串中插入字串、移除字串和取代字串:

範例一、計算字串長度

範例二、取得最左邊一個字元併入最右邊

範例三、於字串中尋找字元個數

範例四、將字串中全部字元改成大寫

範例五、將子字串合併、分隔

範例六、比較兩字串的關係

範例七、添加字串前後空白字元或特定字元

範例八、去除字串前後空白字元或特定字元

範例九、將字串中全部改成大寫字元或全部改成小寫字元

範例十、跑馬燈、數字鐘及定時器

Page 11: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

1、 取得子字串:String.Substring

方法:String.Substring (Int32, Int32)

語法:public string Substring(int startIndex, int length)

說明:從這個執行個體擷取子字串。 子字串起始於指定的字元位置,並

且具有指定的長度。

string a="aadsfdjkfgklfdglfd"

a.substring(5) //截取从第五位以后的所有字符串

a.substring(0,5) //截取从第 0 位置开始长度为 5 的字符串

string l_Tmp0 = "abc 這是測試";

l_Tmp0.Substring(0,3) ==> abc

l_Tmp0.Substring(0,4) ==> abc 這

l_Tmp0.Substring(0,5) ==> abc 這是

String.Substring (Int32) 檢索子字串。子字串從指定的位置開始。

String.Substring (Int32, Int32) 檢索子字符串。子字串從指定的位置開始且指定長度。

string str = "深圳市盈基實業有限公司國際通鄧事文*深圳市盈基實業有限公司國際通

鄧事文";

Label1.Text = str.Substring(11);//返回“國際通鄧事文*深圳市盈基實業有限公司國際

通鄧事文”

Label1.Text = str.Substring(11,7);//返回“國際通鄧事文*”

取出子字串 Substring 方法

"字串測試".Substring(1, 2); // result = "串測"

indexof() :在字符串中从前向后定位字符和字符串;所有的返回值都是指在字符串的

绝对位置,如为空则为- 1

string test="asdfjsdfjgkfasdsfsgfhgjgfjgdddd";

test.indexof('d') =2 //从前向后 定位 d 第一次出现的位置

test.indexof('d',1) =2 //从前向后 定位 d 从第三个字符串 第一次出现

的位置

test.indexof('d',5,2) =6 //从前向后 定位 d 从第 5 位开始查,查 2 位,即 从第

5 位到第 7 位;

lastindexof() :在字符串中从后向前定位字符和字符串;、

用法和 indexof() 完全相同。

下面介绍 IndexOfAny ||lastindexofany

Page 12: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

他们接受字符数组做为变元,其他方法同上,返回数组中任何一个字符最早出现的下标

位置

如下

char[] bbv={'s','c','b'};

string abc = "acsdfgdfgchacscdsad";

Response.Write(abc.IndexOfAny(bbv))=1

Response.Write(abc.IndexOfAny(bbv, 5))=9

Response.Write(abc.IndexOfAny(bbv, 5, 3))=9

lastindexofany 同上。

2、 字串中搜尋字元或子字串:String.IndexOf

方法:String.IndexOf (Char, Int32, Int32)

說明:傳回指定字元在此範例中的第一個對應項的索引。搜索從指定字元

位置開始,並檢查指定數量的字元位置。

參數:value:要查找的 Unicode 字符;startIndex:搜索起始位置;count:

要檢查的字元位置數。返回值(Int32):如果找到該字元,則為 value

的索引位置;否則如果未找到,則為-1。

範例:

string str = "深圳市盈基實業有限公司國際通鄧事文*深圳市盈基實業有限公司國際通

鄧事文";

Label1.Text = str.IndexOf("中國").ToString();//返回-1

Label1.Text = str.IndexOf("盈基").ToString();//返回 3

Label1.Text = str.IndexOf("盈基",10).ToString();//返回 21 說明:這是從第 10 個字符

開始查起。

Label1.Text = str.IndexOf("鄧",15,10).ToString();//返回-1

Label1.Text = str.IndexOf("鄧",15,20).ToString();//返回-32 說明:從第 15 個字符開

始查找,要查找的範圍是從第 15 個字符開始後 20 個字符,即從第 15-35 個字符中查

找。

Page 13: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

當我們必須想知道某字串中是否有特定字串或字元時:

可以使用 String 類別的 IndexOf 方法來傳回特定字串 (字元) 在字串中的索引位置

另外,我們也可以利用 LastIndexOf 方法於字串中從後往前找到特定字串並回傳索引

位置

PS. 索引位置由 0 開始

PS. 在 .NET Framework 下每個中文字都算一字元,而不再是 ASCII 時代的兩字元了

PS. LastIndexOf 方法和 IndexOf 一樣回傳索引位置,一樣搜尋特定字串,只不過

IndexOf 方法是由前往後找,但 LastIndexOf 方法是由後往前找

"字串測試字串測試".IndexOf("串"); // result = 1

"字串測試字串測試".IndexOf("串測"); // result = 1

"字串測試字串測試".LastIndexOf("串測"); // result = 5

"字串測試字串測試".IndexOf("串"); // result = 1

"字串測試字串測試".IndexOf("串測"); // result = 1

"字串測試字串測試".LastIndexOf("串測"); // result = 5

3、 字串中搜尋字元或子字串:String.LastIndexOf

方法:String.LastIndexOf()

說明:傳回指定的 Unicode 字元或 String 在此實例中的最後一個對應

項的索引位置指定字在此範例中的第一個項的索引。

名稱 說明

String.LastIndexOf (Char) 報告指定 Unicode 字符在此實例中的最後一

個匹配項的索引位置。

String.LastIndexOf (String) 報告指定的 String 在此實例內的最後一個匹

配項的索引位置。

String.LastIndexOf (Char, I

nt32)

報告指定 Unicode 字符在此實例中的最後一

個匹配項的索引位置。該搜索從指定字符位置

開始。

String.LastIndexOf (String,

Int32)

報告指定的 String 在此實例內的最後一個匹

配項的索引位置。該搜索從指定字符位置開始。

String.LastIndexOf (String,

StringComparison)

報告指定字符串在當前 String 對像中最後一

個匹配項的索引。一個參數指定要用於指定字

Page 14: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

符串的搜索類型。

String.LastIndexOf (Char, I

nt32, Int32)

報告指定的 Unicode 字符在此實例內的子字

符串中的最後一個匹配項的索引位置。搜索從

指定字符位置開始,並檢查指定數量的字符位

置。

String.LastIndexOf (String,

Int32, Int32)

報告指定的 String 在此實例內的最後一個匹

配項的索引位置。搜索從指定字符位置開始,

並檢查指定數量的字符位置。

String.LastIndexOf (String,

Int32, StringComparison)

報告指定字符串在當前 String 對像中最後一

個匹配項的索引。參數指定當前字符串中的起

始搜索位置,以及要用於指定字符串的搜索類

型。

String.LastIndexOf (String,

Int32, Int32, StringCompa

rison)

報告指定的 String 對像在此實例內的最後一

個匹配項的索引位置。參數指定當前字符串中

的起始搜索位置、要搜索的當前字符串中的字

符數量,以及要用於指定字符串的搜索類型。

範例:

string str = "深圳市盈基實業有限公司國際通鄧事文*深圳市盈基實業有限公司國際通

鄧事文";

Label1.Text = str.LastIndexOf("鄧文").ToString();//返回-1

Label1.Text = str.LastIndexOf("鄧").ToString();//返回 32

Label1.Text = str.LastIndexOf("鄧",8).ToString();//返回-1

Label1.Text = str.LastIndexOf("鄧",20).ToString();//返回 14

Label1.Text = str.LastIndexOf("鄧",33).ToString();//返回 32

在指定的範圍內查找字元,這個範圍是上面的輸入的參數,從索引 0 開始

到指定的數值位置範圍內查找最後一個對應的字串的位置。示例中,0-8

中沒有“鄧”字,所以返回-1,0-20 範圍中,有一個“鄧”字在索引 14 位置

上,0-33 範圍中有兩個“鄧”字,因為 LastIndexOf是返回最後一個匹配

項索引位置,所以返 32,而不是 14。

PS : IndexOf、LastIndexOf 都是返回一個位置,是個整數值;找不到都返回-1;

Page 15: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

IndexOf 是從左向右查,LastIndexOf 是從右向左查,不管是 IndexOf

還是 LastIndexOf,索引序列都是從左到右的(起始值是 0)

4、 串連字串陣列及分隔:String.Split 和 Join

尤其是 join 方法,因為有許多組合方法可以取代它的功能,雖然 Join 其有所限制,如串連前必須得知所有的字串,而不能將字串持續串連下去 但其實在某些場合之下還滿好用的。 PS. Join 方法遇到字串陣列中有空字串時,還是會串連進回傳的字串中 string.Join("+", new string[] { "一", "二", "三", "四", "五" }); // result = "一+二+三+四+五" "一+二+三+四+五".Split("+"); // result = 字串陣列 string.Join("+", new string[] { "一", "二", "三", "四", "五" }); // result = "一+二+三+四+五" "一+二+三+四+五".Split("+"); // result = 字串陣列

1、 用字符串分隔:

using System.Text.RegularExpressions;

string str="aaajsbbbjsccc";

string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);

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

輸出結果:

aaa

bbb

ccc

2、 用多個字符來分隔:

string str="aaajbbbscccjdddseee";

string[] sArray=str.Split(new char[2]{'j','s'});

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

輸出結果:

aaa

bbb

ccc

ddd

eee

3、 用單個字符來分隔:

Page 16: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

字符串 str=“aaajbbbjccc”;

字符串[] sArray= str.Split(“J”);

的 foreach(字符串 sArray 我)回复於(i.ToString()+“ - ”);

輸出結果:

aaa

bbb

ccc

string m_code_id = "u_00001";

char[] ch1=new char[]{'_'}; //定義分割字元

string[] split1 = m_code_id.Split(ch1);

傳回 split1[0]=u

傳回 split1[1]=1

int n_code_id = int.Parse(split1[1]) + 1; //轉型後+1

傳回 n_code_id ="2"

string o_code_id = n_code_id.ToString("00000"); //格式化

傳回 o_code_id ="00002"

將"u_"+o_code_id 完成"u_00002"

string m_code_id = "u00001".ToString().Substring(1);

傳回 m_code_id ="1";

5、 String.Compare 是靜態方法 (Static Method)比較字串的關係

方法:String.Compare()

說明:會回傳整數值,來表示兩個字串的關聯性。

正數表示第一個字串大於第二個字串

Page 17: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

負數表示第一個字串小於第二的字串

零值表示兩個字串相等

string.Compare("字串", "測試"); // result = -1 string.Compare("字串測試", "字串測試"); // result = 0 string.Compare("字串", "測試"); // result = -1 string.Compare("字串測試", "字串測試"); // result = 0

6、 去除或添加字串前後空白字元或特定字元:

我們可以用 Trim 方法去除字串前後的空白字元

而 TrimStart 及 TrimEnd 可以只移除前後的空白字元

另外 Trim, TrimStart, TrimEnd 方法除了可以移除空白字元外,還可以移除一個或

多個字元

"字字串串測測試試".Trim("字試".ToCharArray()); // result = "串串測測" "字串測試".Trim("串字試".ToCharArray()); // result = "測" "字串測試".TrimStart(new char[] { '試', '字', '串' }); // result = "測試" "字串測試".TrimEnd("串試字".ToCharArray()); // result = "字串測" "字字串串測測試試".Trim("字試".ToCharArray()); // result = "串串測測" "字串測試".Trim("串字試".ToCharArray()); // result = "測" "字串測試".TrimStart(new char[] { '試', '字', '串' }); // result = "測試" "字串測試".TrimEnd("串試字".ToCharArray()); // result = "字串測"

7、 字串前後添加空白字元或特定字元:

PadLeft 及 PadRight 方法則和上例功能相反 - 將字串前後補上空白字元或特定

字元

方法中第一個參數則是決定補上字元後的總長度 如果原字串就比第一個參數小了,則就不補上字元了 // 字串前補上 '@' 字元到長度 10 "字串測試".PadLeft(10, '@'); // result = "@@@@@@字串測試" // 字串長度比 2 小,則不補上 '@' 字元 "字串測試".PadRight(2, '@'); // result = "字串測試" // 字串前補上 '@' 字元到長度 10 "字串測試".PadLeft(10, '@'); // result = "@@@@@@字串測試" // 字串長度比 2 小,則不補上 '@' 字元 "字串測試".PadRight(2, '@'); // result = "字串測試"

8、 在字串中插入字串、移除字串和取代字串:

我們可以用 Insert, Remove, Replace 來處理字串的插入、移除、取代

這三個方法用法還滿直覺簡單

PS. Remove 只可以移除指定位置的指定長度字串,而無法帶入要移除的字串

但是其實可以利用 Replace 來做指定字串的移除

"字串測試".Insert(2, "ABCD"); // result = "字串 ABCD 測試" "字串測試".Remove(1, 2); // result = "字試" "字串測試".Replace("串測", "ABCD"); // result = "字 ABCD 試" "字串測試".Replace("串測", string.Empty); // result = "字試" "字串測試".Insert(2, "ABCD"); // result = "字串 ABCD 測試" "字串測試".Remove(1, 2); // result = "字試"

Page 18: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

"字串測試".Replace("串測", "ABCD"); // result = "字 ABCD 試" "字串測試".Replace("串測", string.Empty); // result = "字試"

9、 字串轉換大小寫:

ToUpper 及 ToLower 方法可以將字串全部轉換成大寫或小寫,並將結果回傳成

新的字串

"abcdABCD".ToUpper(); // result = "ABCDABCD" "abcdABCD".ToLower(); // result = "abcdabcd" "abcdABCD".ToUpper(); // result = "ABCDABCD" "abcdABCD".ToLower(); // result = "abcdabcd"

實例應用:

[C#] 跑馬燈與數字鐘

Label 的用法

Timer 的用法:

Button 的用法

trackBar 的用法

string str = "歡迎光臨 C# 的程式設計世界裡.....";

string tmp;

int sw = 0;

string dt;

public Form1()

{

InitializeComponent();

trackBar1.Maximum = 1000;

trackBar1.Minimum = 10;

trackBar1.Value = 100;

}

private void button1_Click(object sender, EventArgs e)

{

tmp = str.Substring(0, 1);

str = str.Substring(1, str.Length - 1) + tmp;

label1.Text = str;

}

private void button2_Click(object sender, EventArgs e)

{

sw = sw + 1;

Page 19: C# 程式設計手冊-- 字串 Visual Studio 2015 · 使用其中一個命名慣例。 String 類別提供許多方法,讓您可以安全地建立、處理和比較字串。 除此之外,C#

if (sw == 1)

{

timer1.Enabled = true;

}

else

{

timer1.Enabled = false;

sw = 0;

}

}

private void timer1_Tick(object sender, EventArgs e)

{

timer1.Interval = trackBar1.Value;

str = str.Substring(1, str.Length - 1) + str.Substring(0, 1);

label2.Text = str;

dt=DateTime.Now.ToString();

label3.Text = dt.Substring(10,11);

label4.Text = dt.Substring(0, 10);

}

參考網站:

https://dotblogs.com.tw/larry/2008/10/30/5825

http://unicomleaner.blogspot.tw/2011/04/c.html