string 字符串的分隔处理与list的相互转换

在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串。(来源于MSDN)

有两个重载函数:
[C#]
public static string Join(
   string separator,
   string[] value
);

[C#]
public static string Join(
   string separator,
   string[] value,
   int startIndex,
   int count
);

这里仅仅演示一个技巧性的代码:

 1private void button4_Click(object sender, System.EventArgs e)
 2{
 3 String str1 = "*;|@123***456@|;*";
 4 String delim = "*;|@";
 5 String str2 = String.Join("" ,str1.Split(delim.ToCharArray()));
 6
 7 this.TestInfo.Text += String.Format("Delimiters:      {0},Len={1}/r/n", delim ,delim.Length);
 8 this.TestInfo.Text += String.Format("Original string: {0},Len={1}/r/n", str1 ,str1.Length);
 9 this.TestInfo.Text += String.Format("Trimmed string:  {0},Len={1}/r/n", str2 ,str2.Length);
10}
11
12

结果如下:
Delimiters:      *;|@,Len=4
Original string: *;|@123***456@|;*,Len=17
Trimmed string:  123456,Len=6

其上看来上面的代码我个人的理解如下:

String.Join(seprater, string [] value) 注意它的两个参数  应该一个是分隔符一个是数组名字,

它的作用就是把数组里的各个数组段利用 分隔符组合成一个字符串。

通过上面的例子我们也可以看到它利用空格 把整个数组的内容组合成了一个

但是上面还涉及到了String类的另一个方法 String .Split()函数  关于它的讲解 请参考http://blog.csdn.net/zhvsby/archive/2008/11/28/3404721.aspx

 

另外说明:String.Concat也可以将一个数组的元素连接成为一个字符串,但是它和String.Join的区别显而易见的

String.Join可以添加自己的连接符 如 a+b+c

String.Concat单纯的只是连接        如  abc

根据换行符分隔得到string类型List  例:
string str=this.rtxtEntryNO.Text;;
string[]  strArry= str.Split(new []{ "\n" }, StringSplitOptions.RemoveEmptyEntries);

 

C#中使用string.Split方法来分割字符串的注意事项:
string.Split给我们提供了非常灵活的使用方式, 但是如果使用不当, 会造成错误, 最近在做code review时, 看到大部分人这么使用:
            string s = "A|B|:|C:D";
            string[] ss = s.Split("|:|".ToCharArray());
            //ss[0]: A
            //ss[1]: B
            //ss[2]:
            //ss[3]:
            //ss[4]: C
            //ss[5]: D
其实他的本意是使用”|:|”将字符串分开的, 目标是为了得到数组: “A|B” 和 “C:D”, 但是没有直接找到Split(string)的重载, 所有就是用了ToCharArray(), 很显然, 得到的结果是错误的.

正确的用法为:
            string[] ss1 = s.Split(new[] {"|:|"}, StringSplitOptions.None);
            //ss1[0]: A|B
            //ss1[1]: C:D

后一个参数, 是标志是否自动remove empty的数据. 例如: "A|B|:|C:D|:|" 做分割时, 会返回三个数组, 该数组的最后一个元素是空"", 如果我们想过滤掉这些空的元素, 可以使用参数: StringSplitOptions.RemoveEmptyEntries 即: string[] ss1= s.Split(new[] {"|:|"}, StringSplitOptions.RemoveEmptyEntries); 

例子:

            s = "A|B|:|C:D|:|";
            string[] ss1 = s.Split(new[] {"|:|"}, StringSplitOptions.RemoveEmptyEntries);
            //ss1[0]: "A|B"
            //ss1[1]: "C:D"

            ss1 = s.Split(new[] { "|:|" }, StringSplitOptions.None);
            //ss1[0]: "A|B"
            //ss1[1]: "C:D"
            //ss1[2]: ""

 

首先我们看下String.Split 方法有6个重载函数:

1) public string[] Split(params char[] separator)
2) public string[] Split(char[] separator, int count)
3) public string[] Split(char[] separator, StringSplitOptions options)
4) public string[] Split(string[] separator, StringSplitOptions options)
5) public string[] Split(char[] separator, int count, StringSplitOptions options)
6) public string[] Split(string[] separator, int count, StringSplitOptions options)
下边我们通过一些实例来说明下怎么使用(以下string words = "1,2.3,,4";):

1. public string[] Split(params char[] separator)
程序代码 程序代码
string[] split = words.Split(new Char[] { ',' });//返回:{"1","2.3","","4"}
string[] split = words.Split(new Char[] { ',', '.' });//返回:{"1","2","3","","4"}

2. public string[] Split(char[] separator, int count)
程序代码 程序代码
string[] split = words.Split(new Char[] { ',', '.' }, 2);//返回:{"1","2.3,,4"}
string[] split = words.Split(new Char[] { ',', '.' }, 6);//返回:{"1","2","3","","4"}

3. public string[] Split(char[] separator, StringSplitOptions options)
程序代码 程序代码
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素

4. public string[] Split(string[] separator, StringSplitOptions options)
程序代码 程序代码
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素

5. public string[] Split(char[] separator, int count, StringSplitOptions options)
程序代码 程序代码
string[] split = words.Split(new Char[] { ',', '.' }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素

6. public string[] Split(string[] separator, int count, StringSplitOptions options)
程序代码 程序代码
string[] split = words.Split(new string[] { ",", "." }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
 
 
 

C# LIST和STRING互相转换

List转字符串,用逗号隔开

List<string> list = new List<string>();
list.Add("a");
list.Add("b");
list.Add("c");
//MessageBox.Show(list.);
//LoadModel();
string s = string.Join(",", list.ToArray());
MessageBox.Show(s);

 

List<test> list = new List<test>();
list.Add(new test("1", "a"));
list.Add(new test("2", "b"));
list.Add(new test("", ""));
list.Add(new test("3", "c"));
var a = from o in list select o.test1;
var b = from o in list select o.test2;
string s1 = string.Join(",", a.ToArray());
string s2 = string.Join(",", b.ToArray());
MessageBox.Show(s1 + "\r\n" + s2); 

结果:1,2,,3

      a,b,,c

 

字符串转List

这里s的分隔符不是“,”而是“, ”,后面有一个空格

string s = "1, 2, 3";
List<string> list = new List<string>(s.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries));
foreach (string t in list)
{
    MessageBox.Show("*" + t + "*");
}

这里s的分隔符是“,”

string s = "1,2,3";
List<string> list = new List<string>(s.Split(','));
foreach (string t in list)
{
    MessageBox.Show("*" + t + "*");
}

将上文中的List<string> strList 的值转化成逗号隔开的字符串  例:
 
string ss=string.Join(",", strList.ToArray()) ;

posted on 2015-01-16 16:59  小呀么小二郎  阅读(2683)  评论(0编辑  收藏  举报

导航