C# 中奇妙的函數–7. String Split 和 Join

來源:互聯網
上載者:User

很多時候處理字串資料,比如從檔案中讀取或者存入 - 我們可能需要加入分隔字元(如CSV檔案中的逗號),或使用一個分隔字元來合并字串序列。

 

很多人都知道使用split()的方法,但使用與其對應的Join()方法的人就沒有那麼多。今天,讓我們看看它們的應用。

Split() – 根據分隔字元切割字串成幾部分

 

分割符可以是以下幾種形式中的一種:

  • 只有一個字元的數組:

    • 比方對於“A,B,C,D,E,F” 可以使用 ‘,’ 或者 new [] { ‘,’ } 
  • 有多個字元的數組:
    • 比方對於“A,B-C,D*E,F”使用 new [] { ‘,’ ‘-‘ ‘*’ } :
  • 只有一個字串的數組:
    • 比方對於 “A=>B=>C=>D=>E=>F” new [] { “=>” }
  • 有多個字串的數組 :
    • 比方對於 “A=>B<=C=>D<=E=>F”使用 new [] { “=>”, “<=” }

讓我們在執行個體中看看:

 

string testString = "James Hare,1001 Broadway Ave,St. Louis,MO,63101";

//傳遞的分割可以是一個數組
string[] results = testString.Split(new[] { ',' });

//或者在asp.net 4.0 下傳遞單獨的一個char
results = testString.Split(',');

得到的結果如下

 

 
對待同樣的字串,我們使用 ‘,’ 和 ‘ ‘ (空格):

 

string testString = "James Hare,1001 Broadway Ave,St. Louis,MO,63101";
//傳遞一個數組作為分割的標記
string[] results = testString.Split(new[] { ',', ' ' });
//或者在4.0 下可以直接這樣傳遞
results = testString.Split(',', ' ');

得到下面的結果:

 

使用 string 作為分割符用法是基本一樣的:

string testString = "James Hare,,1001 Broadway Ave,St. Louis,MO,63101";
string[] results = testString.Split(new[] { ",," }, StringSplitOptions.None);

結果:

 

注意在這裡我們必須要提供一個 StringSplitOptions 的選擇. 

 

這個枚舉的類型有兩個值:

  • StringSplitOptions.None: 包含返回的數組中的空數組元素.
  • StringSplitOptions.RemoveEmptyEntries:  省略返回的數組中的空數組元素.

 

最後, Split() 有一個形式是讓你可以限制返回數組元素數量的. 在這種情況下,前面 n-1 的 元素基於你的條件產生,最後一個則是剩下的沒有被分割的部分:


string testString = "James Hare,,1001 Broadway Ave,,,St. Louis,MO,63101";


//返回含有兩個元素的數組.

string[] results = testString.Split(new[] { ',' }, 2, StringSplitOptions.None);


for (int i = 0; i < results.Length; i++)
{
Console.WriteLine("\tElement {0}: \"{1}\"", i, results[i]);
}
使用限制數量的結果是:

   
注意第二個元素還包含了’,’。
Join() – 串聯對象數組的各個元素,其中在每個元素之間使用指定的分隔字元參數
separator
類型:System.String
要用作分隔字元的字串。
values
類型:System.Object[]
一個數組,其中包含要串連的元素。
傳回值

類型:System.String
一個由 values 的元素組成的字串,這些元素以 separator 字串分隔。

 

看下面的例子,用StringBuilder來實現串聯一組字串:

 

string[] parts = { "Apple", "Orange", "Banana", "Pear", "Peach" };


var builder = new StringBuilder();

for (int i = 0; i < parts.Length; i++)
{
builder.Append(parts[i]);


// 將最後一個','去掉

if (i != parts.Length - 1)
{
builder.Append(", ");
}
}


// 結果是 "Apple, Orange, Banana, Pear, Peach"

var result = builder.ToString();

string.Join() 可以輕鬆實現:

 

string[] parts = { "Apple", "Orange", "Banana", "Pear", "Peach" };
var result = string.Join(", ", parts);
 

很多人可以沒有意識到 Join() 可以合并任何類型,如 int, DateTime, double, 或其他自訂的類型! 

當調用 string.Join() 合并非字串的數值時,它實際上會讓每一個元素 ToString().  也就是說這些元素 ToString() 的定義是符合你的需求的才行 – 雖然大部分asp.net庫中的類型都已經有了.

舉例子:

   
// 合并整型 "1,2,3,4,5,6,7,8,9,10"


var numsFromOneToTen = string.Join(",", Enumerable.Range(1, 10));


// 合并不同類型的數值 ==> "1-3.1415927-9/16/2011 12:52:22 PM"

var variousObjects = string.Join("-", new object[] { 1, 3.1415927, DateTime.Now });
最後, Join() 明顯是支援 IEnumerable<T> 和 object[], string[]:
 

string[] arr = { "one", "two", "three" };
Console.WriteLine(string.Join(",", arr));

//.net 4.0 中你可以直接列出所有數值,不必要產生數組
var numsFromOneToTen = string.Join(",", "A", "B", "C", "D", "E");

var variousObjects = string.Join("-", 1, 3.1415927, DateTime.Now);
結論
如果你想將一個字串分割或者串聯一些元素到一個字串,想想能否用 Split()Join().  它們在很多方面都非常有用.
更多精彩的相關文章,請閱讀喜樂的ASP.NET(Alex Song)

參考翻譯自 C#/.NET Little Wonders: The String Split() and Join() methods

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.