String Split 和 Join

不少時候處理字符串數據,好比從文件中讀取或者存入 - 咱們可能須要加入分隔符(如CSV文件中的逗號),或使用一個分隔符來合併字符串序列。數組

 

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

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

 

分割符能夠是如下幾種形式中的一種:asp.net

  • 只有一個字符的數組:
    • 比方對於「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 [] { 「=>」, 「<=」 }

讓咱們在實例中看看:ui

 

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

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

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

獲得的結果以下對象

ScreenShot022 

 
對待一樣的字符串,咱們使用 ‘,’ 和 ‘ ‘ (空格):

 

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

獲得下面的結果:
ScreenShot023

 

使用 string 做爲分割符用法是基本同樣的:three

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

結果:

ScreenShot024

 

注意在這裏咱們必需要提供一個 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]); }
使用限制數量的結果是:
ScreenShot025
   
注意第二個元素還包含了’,’。

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().  它們在不少方面都很是有用.
相關文章
相關標籤/搜索