You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将字符串按两位拆分并添加至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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:08:16