首页 > 解决方案 > 如何在 C# 中按位置获取行和列?

问题描述

考虑以下字符串:

var text = @"


Hello How
Are       You doing?
""MyNameIs:""
       XYY

";

如何在具有相关列和行的任何位置(> = 0)获取字符?

位置意味着将所有字符放在一行中,然后从零开始计数,例如:

\n \n \n H e l l o ' ' H o  w  \n  A  r  e ...
0  1  2  3 4 5 6 7 8   9 10 11 12 13 14 15 ...
public CharInfo GetCharInfo(int position) // for example position 35
{
    // ???
    return new CharInfo(char, line, column);
}

在此处输入图像描述

标签: c#

解决方案


将字符串拆分为行:

var lines = text.Split('\n');

然后您可以通过以下方式访问例如第 3 行和第 4 列

char result = lines[3][4];

(假设您从零开始计数)

编辑:更新您的问题后,此代码可能会帮助您:

int position = 35;
string[] lines = text.Split('\n');
        int lineIndex = 0;
        int columnIndex = 0;
        foreach(string line in lines)
        {
            if(position < line.Length)
            {
                columnIndex = position;
                break;
            }
            else
            {
                position -= line.Length + 1; // +1 because split removes the \n
            }
            lineIndex++;
        }
        Console.WriteLine("line="+lineIndex);
        Console.WriteLine("column="+columnIndex);
        Console.WriteLine("char="+text[position]);

这会为您提供位置 35 处的字符、行和列。


推荐阅读