首页 > 解决方案 > C#:从带有分隔符的字符串中提取项目的有效方法

问题描述

解析大型分隔字符串的有效方法是什么,以便我可以只访问分隔集中的一个元素,而不必存储涉及的其他子字符串?

示例字符串:“1,2,3,4,....,21,22,23,24”,我的目标是仅提取元素 22,而不必像使用拆分时那样存储其余数字() 方法。

不是这个的副本

也不是建议的副本。就我而言,我特别在有限字符串中寻找一个精确的元素。这与他们试图从无限长的字符串中提取前几次出现的情况有很大不同。我的问题似乎要简单得多。除了我感兴趣的一个元素之外,我不想存储任何额外的标记/数组元素。

标签: c#string

解决方案


我为你的例子做了一个快速的算法。索引是从零开始的,所以0如果你需要第一项,你应该通过。您可以更改分隔符字符或将其作为参数提供。

简短说明:我们遍历字符串的所有字符并跳过所有项目,直到进入请求的项目。之后,我们找到下一个分隔符并返回整个字符串的一部分,如果没有找到任何分隔符,则返回字符串的其余部分。

public static string GetItemByIndex(string line, int index)
{
    for (var i = 0; i < line.Length; i++)
    {
        if (index == 0)
        {
            for (int j = i; j < line.Length; j++)
            {
                if (line[j] == ',')
                {
                    return line.Substring(i, j - i);
                }
            }

            return line.Substring(i, line.Length - i);
        }

        if (line[i] == ',' && index != 0)
        {
            index--;
        }
    }

    return null;
}

推荐阅读