很多時候處理字串資料,比如從檔案中讀取或者存入 - 我們可能需要加入分隔字元(如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