String Split 和 Join
很多時(shí)候處理字符串?dāng)?shù)據(jù),比如從文件中讀取或者存入 - 我們可能需要加入分隔符(如CSV文件中的逗號(hào)),或使用一個(gè)分隔符來(lái)合并字符串序列。
?
很多人都知道使用split()的方法,但使用與其對(duì)應(yīng)的Join()方法的人就沒(méi)有那么多。今天,讓我們看看它們的應(yīng)用。
Split() – 根據(jù)分隔符切割字符串成幾部分
?
分割符可以是以下幾種形式中的一種:
- 只有一個(gè)字符的數(shù)組:
- 比方對(duì)于“A,B,C,D,E,F” 可以使用 ‘,’ 或者 new [] { ‘,’ }?
- 有多個(gè)字符的數(shù)組:
- 比方對(duì)于“A,B-C,D*E,F”使用 new [] { ‘,’ ‘-‘ ‘*’ } :
- 只有一個(gè)字符串的數(shù)組:
- 比方對(duì)于 “A=>B=>C=>D=>E=>F” new [] { “=>” }
- 有多個(gè)字符串的數(shù)組 :
- 比方對(duì)于 “A=>B<=C=>D<=E=>F”使用 new [] { “=>”, “<=” }
讓我們?cè)趯?shí)例中看看:
?
string testString = "James Hare,1001 Broadway Ave,St. Louis,MO,63101";
//傳遞的分割可以是一個(gè)數(shù)組 string[] results = testString.Split(new[] { ',' });
//或者在asp.net 4.0 下傳遞單獨(dú)的一個(gè)char results = testString.Split(',');
得到的結(jié)果如下
?
? 對(duì)待同樣的字符串,我們使用 ‘,’ 和 ‘ ‘ (空格):?
string testString = "James Hare,1001 Broadway Ave,St. Louis,MO,63101"; //傳遞一個(gè)數(shù)組作為分割的標(biāo)記 string[] results = testString.Split(new[] { ',', ' ' }); //或者在4.0 下可以直接這樣傳遞 results = testString.Split(',', ' ');
得到下面的結(jié)果:?
使用 string 作為分割符用法是基本一樣的:
string testString = "James Hare,,1001 Broadway Ave,St. Louis,MO,63101"; string[] results = testString.Split(new[] { ",," }, StringSplitOptions.None);結(jié)果:
?
注意在這里我們必須要提供一個(gè) StringSplitOptions 的選擇.?
?
這個(gè)枚舉的類型有兩個(gè)值:
- StringSplitOptions.None: 包含返回的數(shù)組中的空數(shù)組元素.
- StringSplitOptions.RemoveEmptyEntries:? 省略返回的數(shù)組中的空數(shù)組元素.
?
最后, Split() 有一個(gè)形式是讓你可以限制返回?cái)?shù)組元素?cái)?shù)量的. 在這種情況下,前面 n-1 的 元素基于你的條件生成,最后一個(gè)則是剩下的沒(méi)有被分割的部分:
string testString = "James Hare,,1001 Broadway Ave,,,St. Louis,MO,63101";//返回含有兩個(gè)元素的數(shù)組.
string[] results = testString.Split(new[] { ',' }, 2, StringSplitOptions.None);
for (int i = 0; i < results.Length; i++) { Console.WriteLine("\tElement {0}: \"{1}\"", i, results[i]); } 使用限制數(shù)量的結(jié)果是: 注意第二個(gè)元素還包含了’,’。
Join() – 串聯(lián)對(duì)象數(shù)組的各個(gè)元素,其中在每個(gè)元素之間使用指定的分隔符
參數(shù)
separator返回值
類型:System.String 一個(gè)由 values 的元素組成的字符串,這些元素以 separator 字符串分隔。
?
看下面的例子,用StringBuilder來(lái)實(shí)現(xiàn)串聯(lián)一組字符串:
?
string[] parts = { "Apple", "Orange", "Banana", "Pear", "Peach" };var builder = new StringBuilder();
for (int i = 0; i < parts.Length; i++) { builder.Append(parts[i]);
// 將最后一個(gè)','去掉
if (i != parts.Length - 1) { builder.Append(", "); } }
// 結(jié)果是 "Apple, Orange, Banana, Pear, Peach"
var result = builder.ToString();
用 string.Join() 可以輕松實(shí)現(xiàn):
? string[] parts = { "Apple", "Orange", "Banana", "Pear", "Peach" }; var result = string.Join(", ", parts); ?很多人可以沒(méi)有意識(shí)到 Join() 可以合并任何類型,如 int, DateTime, double, 或其他自定義的類型!?
當(dāng)調(diào)用 string.Join() 合并非字符串的數(shù)值時(shí),它實(shí)際上會(huì)讓每一個(gè)元素 ToString().? 也就是說(shuō)這些元素 ToString() 的定義是符合你的需求的才行 – 雖然大部分asp.net庫(kù)中的類型都已經(jīng)有了.
舉例子:
// 合并整型 "1,2,3,4,5,6,7,8,9,10"var numsFromOneToTen = string.Join(",", Enumerable.Range(1, 10));
// 合并不同類型的數(shù)值 ==> "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 中你可以直接列出所有數(shù)值,不必要生成數(shù)組 var numsFromOneToTen = string.Join(",", "A", "B", "C", "D", "E");
var variousObjects = string.Join("-", 1, 3.1415927, DateTime.Now);
結(jié)論
如果你想將一個(gè)字符串分割或者串聯(lián)一些元素到一個(gè)字符串,想想能否用 Split() 或 Join().? 它們?cè)诤芏喾矫娑挤浅S杏?轉(zhuǎn)載于:https://www.cnblogs.com/1175429393wljblog/p/4815694.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的String Split 和 Join的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C++ 对数组sizeof 和对数组元素
- 下一篇: PHP发起POST DELETE GET