如何从含多个制表符的字符串中提取目标浮点数值?
多制表符字符串的数字提取方案
你的问题核心是原字符串通过多个制表符分隔内容,用Substring手动计算索引容易出错。换用按分隔符拆分的方式会更简单可靠,步骤如下:
步骤说明
- 从源字符串中筛选出包含
FIRST的目标行(源字符串为多行结构) - 用制表符(
\t)拆分目标行,得到各个元素的数组 - 提取数组对应位置的元素,处理数字格式后转换为
float
完整代码实现
string source = "1\t\nFIRST\t36\t4.976.501\t3.162\t3.121\t26\n2\t\n"; // 拆分所有行并过滤空行 var lines = source.Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries); // 定位包含"FIRST"的目标行 string targetLine = lines.First(line => line.Contains("FIRST")); // 用制表符拆分目标行内容,过滤空元素 var parts = targetLine.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); // 提取并转换数字:带多个点的是千分位分隔格式,需先移除分隔符再转换 float firstNumber = float.Parse(parts[1]); float secondNumber = float.Parse(parts[2].Replace(".", "")); float thirdNumber = float.Parse(parts[3].Replace(".", "")); float fourthNumber = float.Parse(parts[4].Replace(".", "")); float fifthNumber = float.Parse(parts[5]); // 输出结果 Console.WriteLine($"float firstNumber = {firstNumber};"); Console.WriteLine($"float secondNumber = {secondNumber};"); Console.WriteLine($"float thirdNumber = {thirdNumber};"); Console.WriteLine($"float fourthNumber = {fourthNumber};"); Console.WriteLine($"float fifthNumber = {fifthNumber};");
关键说明
- 放弃
Substring手动计算索引:当字符串结构变化(比如分隔符数量改变)时,索引计算会直接失效,Split方法按分隔符拆分的逻辑更灵活稳定 - 处理特殊数字格式:原字符串中的
4.976.501是用点作为千分位分隔符的格式,转换为float前必须移除这些分隔符,否则float.Parse会抛出格式异常
内容的提问来源于stack exchange,提问作者Michał Schmude
相关产品推荐
相关产品推荐

