很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如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

http://www.cnblogs.com/multiplesoftware/archive/2011/09/17/2179380.html

C# 中奇妙的函数–7. String Split 和 Join的更多相关文章

  1. C# 中奇妙的函数–8. String Remove() 和 Replace()

    http://www.cnblogs.com/multiplesoftware/archive/2011/09/27/2192710.html 当对字符串进行操作时,我们经常要删除或者是替换一部分子字 ...

  2. C# 中奇妙的函数–String Split 和 Join

    很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列. 很多人都知道使用split()的方法,但使用与其对应的Join ...

  3. C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)

    今天,我们将着眼于五个用于序列的聚合运算.很多时候当我们在对序列进行操作时,我们想要做基于这些序列执行某种汇总然后,计算结果. Enumerable 静态类的LINQ扩展方法可以做到这一点 .就像之前 ...

  4. String Split 和 Join

    很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列. 很多人都知道使用split()的方法,但使用与其对应的Join ...

  5. [Java] String.Split 方法的6个重载函数

    String.Split 方法有6个重载函数: 程序代码 1) public string[] Split(params char[] separator) 2) public string[] Sp ...

  6. C#语言之“String.Split”的使用【转】

    String.Split 方法有6个重载函数: 1) public string[] Split(params char[] separator) 2) public string[] Split(c ...

  7. Python中字符串操作函数string.split('str1')和string.join(ls)

    Python中的字符串操作函数split 和 join能够实现字符串和列表之间的简单转换, 使用 .split()可以将字符串中特定部分以多个字符的形式,存储成列表 def split(self, * ...

  8. java String.split()函数的用法分析

    java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...

  9. String.Split()函数

    我们在上次学习到了 String.Join函数(http://blog.csdn.net/zhvsby/archive/2008/11/28/3404704.aspx),当中用到了String.SPl ...

随机推荐

  1. java 编码 UTF-8、ISO-8859-1、GBK 【转】

    Java支持UTF-8.ISO-8859-1.GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于在Java中如何正确显示中文的文章,但都不够全面,笔者特意 ...

  2. Eclipse Plugin Dev Materials

    以下资料是本人在开发Eclipse 插件时候收集的一些比较有用的资料Link,和大家分享下. 比较权威的资料: Helpful Eclipse Plugin Websites: Eclipse Art ...

  3. 复习完毕STM32开发板

        经过半个晚上的折腾,终于复习了STM32开发板,并使用ST官方库调试完毕一个printf重定向到串口的程序,3.5的库同以前的库不大一样,不过最终搞好了可以睡觉了,还可以睡7个小时.     ...

  4. xhost

    xhost 是用来控制X server访问权限的. 通常当你从hostA登陆到hostB上运行hostB上的应用程序时,做为应用程序来说,hostA是client,但是作为图形来说,是在hostA上显 ...

  5. C errors recods

    error: unterminated #ifndef 1,权限问题 2,少了#endif

  6. LSH、ITQ、SKLSH图像检索实验实现(包含源码下载地址)

    原文来自我的独立blog:http://www.yuanyong.org/blog/cv/lsh-itq-sklsh-compliment 这两天寻找idea,想来思去也没想到好点的方法,于是把前段时 ...

  7. URAL 1736 Chinese Hockey 网络流+建图

    题目链接:点击打开链接 题意: 给定n个队伍的得分情况,输出随意一个可行解. n个队伍随意2个队伍 a, b 间有且仅有一场比赛. 比赛结果分4种: 1.a +3, b +0 2.a +0, b +3 ...

  8. SSCTF-Final-Re-Play

    SSCTF-Final-Re-Play  比赛时花了一晚上搞定了,结果写脚本的时候发送的内容忘记base64加密然后异或8了,手动测试的时候当然是这样做了,写脚本的时候脑抽了.这个题只有forx做出来 ...

  9. 常见Web Service 使用网址

    下面的网址是常用Web Service http://www.webxml.com.cn/zh_cn/web_services.aspx 里面的很多Web Service接口...可以用到的,很有用!

  10. linode最新试用(购买)流程

    最新linode官网www.linode.com可以免费试用7天,但是需要你的身份认证 第一步:注册一个linode账号email填写国内的163.126.qq邮箱是不能认证的,这里可以填写gmail ...