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

当调用 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().  它们在很多方面都非常有用.

最新文章

  1. Android 防止控件被重复点击
  2. golang中的类和接口的使用
  3. HTML5和css3的总结二
  4. disable_irq()与disable_irq_nosync()区别
  5. AngularJS尝鲜一
  6. nginx上用fastcgi配置python环境
  7. HDU 4116 Fruit Ninja
  8. 前后端分离跨服务器文件上传-Java SpringMVC版
  9. 算法题丨Remove Duplicates from Sorted Array
  10. kvm-qcow2派生镜像的远程备份的方法!
  11. android 界面设计
  12. nginx实践(四)之静态资源web服务(防盗链)
  13. 总结Sql Server内置函数实现MD5加密
  14. kettle的安装、配置与运行
  15. TextBox 宽度无效
  16. idea最常使用的快捷键
  17. PKUWC Slay The Spire
  18. Web前端开发最佳实践(5):正确闭合HTML标签,停止使用不标准的标签和属性
  19. oracle 完整性约束的禁用启用以及对表的影响,表的修改和复制
  20. 老笔记本装xubuntu+win7

热门文章

  1. [转][C#]WebAPI 必需 Dll
  2. php的基本内容
  3. jvm感知docker容器参数
  4. Android给TextView设置多个字体颜色
  5. 封装GridSearchCV的训练包
  6. jquery鼠标放上去显示悬浮层即弹出定位的div层
  7. java8实战:filter的简单使用
  8. python学习之----BeautifulSoup示例二
  9. 微信小程序开发踩坑日记
  10. 【Selenium-WebDriver自学】Selenium测试设计技术(十三)