首页 新闻 会员 周边

c#字符串分割

1
悬赏园豆:50 [已解决问题] 解决于 2012-05-09 15:45

随机输入string X="fefefe68aaaaaaaaaaaa681300" 

想得到的结果:fe fe fe 68 aa aa aa aa aa aa 68 13 00

PS:字符串是随机的,个数可能是奇数,也可能是偶数.如果字符串个数是奇数就补0

例:BC DE 24 HI JK LM  68 NO PQ RS T   最后T只有一个数要补0

得 BC DE 24 HI JK LM  68 NO PQ RS 0T

问题补充:

用C#怎么写可以显示我想要的结果

一坨黄色的主页 一坨黄色 | 初学一级 | 园豆:13
提问于:2012-05-07 16:03
< >
分享
最佳答案
0
string s = "ABCDE";

string[] parts = s.Select((c, n) =>
       {
             if (n == s.Length - 1) return "0" + c;
             return c.ToString() + s[n + 1];
       }).Where((c, n) => n % 2 == 0).ToArray();
收获园豆:25
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-05-07 16:56

用linq写好简洁哦,你的linq学的好深入啊

artwl | 园豆:16736 (专家六级) | 2012-05-07 16:59

@artwl: 。。。用的多

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-05-07 17:03

@artwl: 这么写有缺点的,遍历了2遍字符串,简洁的代价就是效率。

水牛刀刀 | 园豆:6350 (大侠五级) | 2012-05-07 17:03

linq用的好强悍

straw | 园豆:191 (初学一级) | 2012-05-07 22:28
其他回答(7)
1

估计正则能直接给分割。。

 

string str = "aabbcceedd1";
            char[] list = str.ToCharArray();
            if (list.Length % 2 == 0)
            {
                for (int i = 0; i < list.Length; i += 2)
                {
                    Response.Write(string.Concat(list[i], list[i + 1]) + "<br>");
                }
            }
            else
            {
                for (int i = 0; i < list.Length; i += 2)
                {
                    if (i == list.Length - 1)
                    {
                        Response.Write(string.Concat(list[i], "0") + "<br>");
                        break;
                    }
                    Response.Write(string.Concat(list[i], list[i + 1]) + "<br>");
                }
            }

收获园豆:5
East神奇 | 园豆:21 (初学一级) | 2012-05-07 16:25
0
static string[] GetArrayFromString(string val)
{
    var count = val.Length % 2 == 0 ? val.Length / 2 : (val.Length + 1) / 2;
    var charVal = val.ToArray();
    string[] result = new string[count];
    for (var i = 1; i < val.Length; i++)
    {
        if ((i + 1) % 2 == 0)
        {
            result[(i-1) / 2] = charVal[i - 1] + "" + charVal[i];
        }
    }
    if (charVal.Length % 2 != 0)
    {
        result[count - 1] = "0" + charVal[val.Length - 1];
    }
    return result;
}
收获园豆:5
artwl | 园豆:16736 (专家六级) | 2012-05-07 16:30
1

分割字符串,不够补0!

lonely_rain | 园豆:752 (小虾三级) | 2012-05-07 17:51
0

屎上最强大最肮脏最复杂的 版本 出炉啦。。

最近有点变态倾向。。唉。。发出来给发家看下,权当消遣了。。。。

   /// <summary>
        /// 获取插入索引序列
        /// </summary>
        /// <param name="length"></param>
        /// <returns></returns>
        public IEnumerable<int> GetIndexs(int length)
        {
            int lastInsertIndex = 2;
            for (var i = 0; i < length / 2; i++)
            {
                if (i == 0)
                {
                    yield return lastInsertIndex;
                    continue;
                }
                yield return lastInsertIndex + 3;

                lastInsertIndex = lastInsertIndex + 3;
            }
        }

 

            var X = "fefefe68aaaaaaaaaaaa681300q";
            if (X.Length % 2 != 0)
            {
                X = X.Insert(X.Length - 1, "0");
            }

            X = GetIndexs(X.Length).Aggregate(X, (current, index) => current.Insert(index, " "));

            Console.WriteLine(X);

人头保证 绝对符合题目 要求。。

收获园豆:5
waninlezu | 园豆:661 (小虾三级) | 2012-05-08 02:05

我怎么这么蛋疼。。没救了。

不过 getindex 方法 可以抽象 出 更高级别的 函数,写的更通用。。

哎。。又开始 蛋疼了。

支持(0) 反对(0) waninlezu | 园豆:661 (小虾三级) | 2012-05-08 02:09

@waninlezu: 

好吧。蛋碎版 来了。。

  /// <summary>
        /// 获取插入索引序列
        /// </summary>
        /// <param name="length">要获取的序列长度</param>
        /// <param name="splitorLength">分隔符长度</param>
        /// <param name="intervalLength">间隔长度</param>
        /// <returns></returns>
        public IEnumerable<int> GetInsertIndexs(int length, int splitorLength, int intervalLength)
        {
            int lastInsertIndex = intervalLength;
            for (var i = 0; i < length / intervalLength; i++)
            {
                if (i == 0)
                {
                    yield return lastInsertIndex;
                    continue;
                }
                yield return lastInsertIndex + intervalLength + splitorLength;

                lastInsertIndex = lastInsertIndex + intervalLength + splitorLength;
            }
        }

 

 

   var X = "fefefe68aaaaaaaaaaaa681300q";
           
            X = GetInsertIndexs(X.Length, 2, 3).Aggregate(X, (current, index) => current.Insert(index, "##"));

            Console.WriteLine(X);

蛋,,碎了一地。。。

支持(0) 反对(0) waninlezu | 园豆:661 (小虾三级) | 2012-05-08 02:17
0

呵呵,很多人回答哦,答案各有千秋,没全细读,差不多都是能达到你的要求的。

这里我也给出一段代码,算作引玉之砖,或许能给你一些帮助。

        public string Split(string source, int subLen = 2, char separater = ' ')
        {
            if (string.IsNullOrEmpty(source))
            {
                return source;
            }
            if (subLen <= 0)
            {
                subLen = 2;
            }

            StringBuilder builder = new StringBuilder(source);
            int len = builder.Length / subLen;
            if (builder.Length % subLen == 0)
            {
                len--;
            }
            while (len > 0)
            {
                builder.Insert(len * subLen, separater);
                len--;
            }
            return builder.ToString();
        }
收获园豆:5
无之无 | 园豆:5095 (大侠五级) | 2012-05-08 08:43

我喜欢这样的写法

支持(0) 反对(0) 笨笨鱼~ | 园豆:202 (菜鸟二级) | 2015-06-10 11:26
0

这么多列子可以参考啊,顶~

Philomena | 园豆:154 (初学一级) | 2012-05-08 10:20
0

鄙视发帖后不结贴,也不交流的童鞋

小郭哥 | 园豆:63 (初学一级) | 2012-05-09 13:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册