如何将字符串按两位拆分并添加至List<int>集合?
按两位拆分字符串并转换为整数列表的实现方案
嘿,这需求很常见,我给你几种C#的实现方式,你可以根据自己的场景选最合适的:
方法一:基础循环截取(最直观,易理解)
这种方式适合新手,逻辑清晰,还能轻松处理边界情况:
string mystring = "123456"; var list = new List<int>(); // 步长设为2,每次取两个字符 for (int i = 0; i < mystring.Length; i += 2) { // 确保不会越界,比如字符串长度为奇数时取剩余的所有字符 int takeLength = Math.Min(2, mystring.Length - i); string segment = mystring.Substring(i, takeLength); // 用TryParse避免转换失败(比如字符串含非数字字符) if (int.TryParse(segment, out int number)) { list.Add(number); } }
说明:如果你的字符串长度一定是偶数(比如固定6位),可以把takeLength直接写2,不用Math.Min。TryParse能保证程序不会因为无效字符崩溃,非常实用。
方法二:LINQ简洁写法(代码更紧凑)
如果喜欢简洁的函数式写法,用LINQ一行就能搞定(假设字符串是偶数长度且全为数字):
string mystring = "123456"; var list = Enumerable.Range(0, mystring.Length / 2) .Select(index => int.Parse(mystring.Substring(index * 2, 2))) .ToList();
如果要兼容可能的无效字符,调整成带TryParse的版本:
var list = Enumerable.Range(0, mystring.Length / 2) .Select(index => { int.TryParse(mystring.Substring(index * 2, 2), out int num); return num; }) .Where(num => num != 0) // 过滤转换失败的结果,按需调整 .ToList();
说明:Enumerable.Range生成的序列长度是字符串长度的一半,每个元素对应截取的起始位置,写法非常巧妙。
方法三:正则表达式(适合复杂字符串场景)
如果你的字符串里可能混有其他字符,只想提取连续的两位数字,正则会很方便:
using System.Text.RegularExpressions; string mystring = "123456"; var matches = Regex.Matches(mystring, @"\d{2}"); var list = matches.Cast<Match>() .Select(match => int.Parse(match.Value)) .ToList();
说明:正则\d{2}会匹配所有连续的两位数字,哪怕字符串是"12ab34-56",也能提取出12、34、56。
内容的提问来源于stack exchange,提问作者kjthoms
相关产品推荐
相关产品推荐

