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
);
这里仅仅演示一个技巧性的代码:
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
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个重载函数:
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)
1. public string[] Split(params char[] separator)
string[] split = words.Split(new Char[] { ',', '.' });//返回:{"1","2","3","","4"}
2. public string[] Split(char[] separator, int count)
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.None);//返回:{"1","2","3","","4"} 保留空元素
4. public string[] Split(string[] separator, StringSplitOptions options)
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[] { ',', '.' }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
6. public string[] Split(string[] separator, int count, StringSplitOptions options)
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 + "*");
}