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();
用linq写好简洁哦,你的linq学的好深入啊
@artwl: 。。。用的多
@artwl: 这么写有缺点的,遍历了2遍字符串,简洁的代价就是效率。
linq用的好强悍
估计正则能直接给分割。。
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>");
}
}
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; }
分割字符串,不够补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);
人头保证 绝对符合题目 要求。。
我怎么这么蛋疼。。没救了。
不过 getindex 方法 可以抽象 出 更高级别的 函数,写的更通用。。
哎。。又开始 蛋疼了。
@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);
蛋,,碎了一地。。。
呵呵,很多人回答哦,答案各有千秋,没全细读,差不多都是能达到你的要求的。
这里我也给出一段代码,算作引玉之砖,或许能给你一些帮助。
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(); }
我喜欢这样的写法
这么多列子可以参考啊,顶~
鄙视发帖后不结贴,也不交流的童鞋