C# Exercism日志等级习题:提取日志消息子串的实现问题
代码问题排查
你的代码存在以下几个明显问题:
- 方法第一行就执行了
throw new NotImplementedException,异常抛出后你写在后面的所有实现逻辑永远不会被执行,直接删除这行即可。 - C#中字符串的长度属性是首字母大写的
Length,你写的小写length会直接触发编译错误。 - 硬编码查找
[ERROR]:的位置不符合需求:题目要求支持所有日志等级(INFO、WARNING、ERROR等),不能只适配ERROR场景。 - 用
LastIndexOf("n")定位消息末尾的逻辑完全错误:如果消息内容不含字符n、或是n不是最后一个字符,返回结果会完全错乱。 - 没有处理日志内容前后可能存在的空白字符,不符合测试用例要求。
正确实现方案
核心逻辑非常简单:找到日志行中冒号:的位置,从冒号的下一位开始截取到字符串末尾,再修剪掉前后的空白字符即可:
static class LogLine { public static string Message(string logLine) { int colonPosition = logLine.IndexOf(':'); return logLine.Substring(colonPosition + 1).Trim(); } }
测试效果验证:
输入[ERROR]: Invalid operation时,Substring会从冒号后第一位(也就是空格的位置)开始截取到末尾,得到" Invalid operation",经过Trim()处理后就得到目标结果"Invalid operation"。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

