日期:2014-05-16  浏览次数:20914 次

一个很简单的问题 string.split()

            string dd = "600000 ABCDEFG       BANK      ";
            string[] ddarr = dd.Trim().Split(new string[]{" "}, StringSplitOptions.RemoveEmptyEntries );

            foreach (var item in ddarr )
            {
                Console.WriteLine("|" + item + "|");
            }
            /* Output WHY?
               |600000 ABCDEFG|
               | |
               |BANK|
             */


我有点晕了,我想将字符串数组dd里面的3个单词提出来,为什么分离不成功,应怎么编码。
------解决方案--------------------
1、将两个空格通过replace替换成一个空格
2、根据空格分隔,不要使用后面那个 StringSplitOptions.RemoveEmptyEntries 参数
------解决方案--------------------
参考 
var cusNames = master.CusName.Split('/');
                master.CusName = cusNames[0].Trim();
                if (cusNames.Length > 1 && string.IsNullOrEmpty(master.Contacts))
                {
                    master.Contacts = cusNames[1].Trim();
                }
------解决方案--------------------
貌似没什么问题.可以正常输出吧.
------解决方案--------------------
你都Trim了还怎么Split空格啊
用正则Split吧。string[] ddarr =Regex.Split(dd, @"[ ]+");
------解决方案--------------------
代码没问题。是你600000    ABCDEFG  这两个之间的非打印字符不是空格 可能是Tab键按出来的
------解决方案--------------------
Trim是去除左右空格,和分离没有关系

另外,使用正则分离,要去除空内容,正则两种方法

//分离
            string[] ddarr = Regex.Split(dd,@"\s+").Where(a=>!string.IsNullOrEmpty(a)).ToArray();
            //匹配
            string[] ddarr1 = Regex.Matches(dd, @"\S+(?=\s
------解决方案--------------------
$)").Cast<Match>().Select(a=>a.Value).ToArray();

------解决方案--------------------
引用:
你都Trim了还怎么Split空格啊
用正则Split吧。string[] ddarr =Regex.Split(dd, @"[ ]+");


Trim只是去掉头尾非打印字符,不会去掉中间的非打印字符