C#程序读取指定前缀文本行失败:目标输出文件为空
问题分析与解决方案
嘿,我一眼就瞅出你代码里的问题啦!目标文件为空的根源在于你Linq过滤条件用错了方法~
你看这段代码:
.Where(line => prefixes.All(prefix => line.StartsWith(prefix)))
All()方法的逻辑是要求当前行必须同时满足所有前缀的StartsWith条件,但一行文本怎么可能同时以Mr.、Mrs.和Ms.开头呢?这就导致没有任何行能通过过滤,写入的文件自然是空的。
修正后的代码
把All()换成Any()就搞定了,Any()的逻辑是只要行满足任意一个前缀的StartsWith条件,就会被选中:
var prefixes = new List<string> { "Mr.", "Mrs.", "Ms." }; // 读取文件并过滤符合条件的行 var nameIDLines = File.ReadAllLines(filePath) .Where(line => prefixes.Any(prefix => line.StartsWith(prefix))) .ToList(); // 将过滤后的内容拼接成字符串并写入目标文件 var filteredAsString = string.Join(Environment.NewLine, nameIDLines); File.WriteAllText(targetFilePath, filteredAsString);
额外优化建议
如果需要忽略大小写(比如匹配mr.、MS.这类格式),可以给StartsWith加上大小写忽略的参数:
.Where(line => prefixes.Any(prefix => line.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)))
内容的提问来源于stack exchange,提问作者rcarcia02
相关产品推荐
相关产品推荐

