使用LINQ解决矩阵文件读取时末尾]]导致的空条目问题
解决单行[[...]]格式文件转矩阵时的空列表问题
针对单行[[...]]格式的矩阵文件,读取时因末尾]]产生空列表的问题,无需修改文件格式,直接在LINQ处理流程里就能解决,以下几种实用方案:
方案1:投影后过滤空列表
在原有拆分投影的基础上,追加Where条件过滤掉空的列表条目,直接修正结果:
var matrix = File.ReadAllText("matrix.txt") .Split(new[] { '[', ']' }) // 按[和]拆分所有内容 .Select(s => s.Split(',') .Where(n => !string.IsNullOrWhiteSpace(n)) // 过滤单个元素里的空字符串 .Select(int.Parse) .ToList()) .Where(list => list.Any()) // 过滤掉空的列表 .ToList();
原理:拆分后末尾的]]会生成空字符串,转成列表后就是空列表,用list.Any()直接排除这类无效条目。
方案2:先预处理字符串再拆分
先去掉首尾的[[和]],再按],[拆分行,从根源避免无效拆分:
var content = File.ReadAllText("matrix.txt"); // 移除开头的两个[和结尾的两个] var cleanContent = content.TrimStart('[').TrimEnd(']'); var matrix = cleanContent.Split(new[] { "],[" }, StringSplitOptions.None) .Select(row => row.Split(',') .Select(int.Parse) .ToList()) .ToList();
这种方式最直观,拆分出来的每一段都是完整的行数据,不需要额外过滤空值。
方案3:用正则匹配提取有效行
如果格式可能存在微小变动(比如空格),用正则精准匹配每个内部数组:
using System.Text.RegularExpressions; var content = File.ReadAllText("matrix.txt"); var matrix = Regex.Matches(content, @"\[(.*?)\]") .Cast<Match>() .Select(match => match.Groups[1].Value.Split(',') .Select(str => int.Parse(str.Trim())) // 处理可能的空格 .ToList()) .ToList();
正则\[(.*?)\]会匹配每一个被[]包裹的行内容,直接提取内部数据,完全避开首尾的[[和]]带来的问题。
内容的提问来源于stack exchange,提问作者I. Eduard
相关产品推荐
相关产品推荐

