C# 采用Spilt 每隔2个字符分割字符串

number007cool 2019-11-06 05:08:54
例如:

str = "123456";

怎样分割成12 34 56 3个字符串
...全文
2867 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2019-11-15
  • 打赏
  • 举报
回复
额。。这个for循环就好了。 毕竟很简单的题目。
  • 打赏
  • 举报
回复
引用 9 楼 number007cool 的回复:
[quote=引用 8 楼 大牌鸡腿 的回复:]
var str = "123456";
var str1 = str.Substring(0, 2);
var str2 = str.Substring(2, 2);
var str3 = str.Substring(4, 2);

按照长度截取不是更方便


嗯 这种方式加上递归调用就很简洁了[/quote]

这不是一个for循环就行了么?
number007cool 2019-11-14
  • 打赏
  • 举报
回复
引用 14 楼 wanghui0380 的回复:
string str = "1234567"; var res= Enumerable.Range(0, str.Length / 2).Select(p =>new string(str.AsSpan().Slice(p*2, 2).ToArray())); 写掉了这个,补上
vs2013支持不
飞天凤凰601 2019-11-14
  • 打赏
  • 举报
回复 1
引用 4 楼 csdnFUCKINGSUCKS 的回复:

var t = System.Text.RegularExpressions.Regex.Split(input, @"(?<=\G.{2})(?!$)");

这个正则很强
wanghui0380 2019-11-08
  • 打赏
  • 举报
回复
string str = "1234567"; var res= Enumerable.Range(0, str.Length / 2).Select(p =>new string(str.AsSpan().Slice(p*2, 2).ToArray())); 写掉了这个,补上
wanghui0380 2019-11-08
  • 打赏
  • 举报
回复
因为俺们不知道,你打算如何处理不是偶数长度的玩意,所以我就不写啥奇偶处理了 简单点玩
引用
string str = "1234567"; var res= Enumerable.Range(0, str.Length / 2).Select(p =>new string(str.AsSpan().Slice(p, 2).ToArray()));
手段很多,我只是简单玩下,用了AsSpan().Slice,只是想提醒一下,新的C#里有这个 同时我故意多加了一个7,因为我不知道你想如何处理奇数的,所以我故意不处理他了
data-v 2019-11-08
  • 打赏
  • 举报
回复
LINQ真强
data-v 2019-11-08
  • 打赏
  • 举报
回复
引用 7 楼 number007cool 的回复:
这些术语翻译得非常烂,不过确实也很难翻译啊 看英文就明白了Positive/Negative lookahead/lookbehind asset lookahead和lookbehind合称lookaround 往前看往后看前后看,很形象吧 翻译成 前有 前无 后有 后无 就完事了

a(?=b)    匹配b前面的a
a(?!b)    匹配不在b前面的a
(?<=a)b   匹配a后面的b
(?<!a)b   匹配不在a后面的b
  • 打赏
  • 举报
回复
正好是偶数位?

            string str = "1234567";
            for (int i = 0; i < str.Length; i = i + 2)
            {
                string tempStr = new string(str.Skip(i).Take(2).ToArray());
                Console.WriteLine(tempStr);
            }
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 8 楼 大牌鸡腿 的回复:
var str = "123456"; var str1 = str.Substring(0, 2); var str2 = str.Substring(2, 2); var str3 = str.Substring(4, 2); 按照长度截取不是更方便
嗯 这种方式加上递归调用就很简洁了
大牌鸡腿 2019-11-08
  • 打赏
  • 举报
回复
var str = "123456"; var str1 = str.Substring(0, 2); var str2 = str.Substring(2, 2); var str3 = str.Substring(4, 2); 按照长度截取不是更方便
number007cool 2019-11-08
  • 打赏
  • 举报
回复
引用 6 楼 WQR1994 的回复:
该正则可以匹配“两字符中间的空隙”,Regex.Split会把字符串在该处断开 “(?<=\G.{2})”“(?!$)”是匹配空隙的限制条件 后者意思是该空隙后面不能是结尾,即不在字符串末尾,在末尾断无可断,所以要限制 前者意思是该空隙前面该有两个字符,这两个字符还得在上一次匹配的后面,或是头两个字符(\G的功能)。 因为断言匹配完会回到断言开始匹配的地方再往后匹配,所以要用\G加以限制,防止重复匹配 不过,用正则的效率应该不如直接操作字符串进行分解。
//magic, don't touch
(? !subexpression) 零宽度负预测先行断言。 \b(? !un)\w + \b "unsure sure un ity used" 中的 "sure" 和 "used" (? <= subexpression) 零宽度正回顾后发断言。(? <= 19)\d{ 2 }\b "1851 1999 19 50 1905 2003" 中的 "99"、"50"和 "05" 零宽度负预测先行断言 和 零宽度正回顾后发断言 看起来有点晕啊, 是以什么什么开头 什么什么结尾的意思么
data-v 2019-11-06
  • 打赏
  • 举报
回复
该正则可以匹配“两字符中间的空隙”,Regex.Split会把字符串在该处断开 “(?<=\G.{2})”“(?!$)”是匹配空隙的限制条件 后者意思是该空隙后面不能是结尾,即不在字符串末尾,在末尾断无可断,所以要限制 前者意思是该空隙前面该有两个字符,这两个字符还得在上一次匹配的后面,或是头两个字符(\G的功能)。 因为断言匹配完会回到断言开始匹配的地方再往后匹配,所以要用\G加以限制,防止重复匹配 不过,用正则的效率应该不如直接操作字符串进行分解。
//magic, don't touch
number007cool 2019-11-06
  • 打赏
  • 举报
回复
引用 4 楼 csdnFUCKINGSUCKS 的回复:

var t = System.Text.RegularExpressions.Regex.Split(input, @"(?<=\G.{2})(?!$)");
能否讲解下,这个正则没太看懂
csdnFUCKINGSUCKS 2019-11-06
  • 打赏
  • 举报
回复

var t = System.Text.RegularExpressions.Regex.Split(input, @"(?<=\G.{2})(?!$)");
mslearn-nashma 2019-11-06
  • 打赏
  • 举报
回复
引用 2 楼 nashma.blog.jp 的回复:
string str = "123456"; string[] arr = str.MySplit(2);
static string[] MySplit(this string str, int count) { var list = new List<string>(); int length = (int)Math.Ceiling((double)str.Length / count); for(int i = 0; i < length; i++) { int start = count * i; if(str.Length <= start) { break; } if(str.Length < start + count) { list.Add(str.Substring(start)); } else { list.Add(str.Substring(start, count)); } } return list.ToArray(); }
mslearn-nashma 2019-11-06
  • 打赏
  • 举报
回复
string str = "123456"; string[] arr = str.MySplit(2);
Bridge_go 2019-11-06
  • 打赏
  • 举报
回复
// // 摘要: // 从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。 // // 参数: // startIndex: // 此实例中子字符串的起始字符位置(从零开始)。 // // length: // 子字符串中的字符数。 // // 返回结果: // 与此实例中在 startIndex 处开头、长度为 length 的子字符串等效的一个字符串,如果 startIndex 等于此实例的长度且 length // 为零,则为 System.String.Empty。 // // 异常: // T:System.ArgumentOutOfRangeException: // startIndex 加 length 之和指示的位置不在此实例中。- 或 -startIndex 或 length 小于零。 [SecuritySafeCritical] [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] public String Substring(int startIndex, int length);

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧