• 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 []{ " " }, 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 + " " + 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()) ;
  • 相关阅读:
    让history命令 显示执行命令的时间
    实现SSH免密登录
    数据库表空间一夜之间爆满 查看最大的表却才几百M 原来是大字段对象CLOB造成的
    Python-集合的操作
    Vim使用技巧
    Linux的内部命令和外部命令
    Redis缓存穿透和雪崩
    网络编程学习一:IP地址转换函数
    每日一问15:C++中的.h,cpp以及.hpp文件
    每日一问14: 缓存和缓冲的区别
  • 原文地址:https://www.cnblogs.com/xiaoerlang90/p/4229225.html
Copyright © 2020-2023  润新知