为什么换行符等于 -1?

-2 c# text-files

当我运行此代码时,lineLength 返回为 -1,当我希望换行符位于文本行字符串的末尾并返回一个相应的值时。如果 \n 字符实际上位于行首,那么如何找到该行中最后一个字符的值?

我尝试通过将 lineLength 设置为 line.Length 来使用 .length 但是当我将 lineLength 作为 line.substring 中的长度参数时,我收到一条错误消息:

“索引和长度必须指向字符串中的某个位置”

int found;
int lineLength;
string[] lines = System.IO.File.ReadAllLines(
        @"C:\Program Files\C# Projects\Password Validation\UserAndPWSystem2\UPInfo.txt");

foreach (string line in lines)
{
    if (line.Contains("user number : "))
    {
        found = line.IndexOf(":");
        lineLength = line.IndexOf('\n');
        Console.WriteLine(lineLength);

        //Console.WriteLine(line.Substring(found + 2,lineLength));
    }
}
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 5

来自以下文档ReadAllLines

此方法打开一个文件,读取文件的每一行,然后将每一行添加为字符串数组的一个元素。然后关闭文件。一行被定义为一个字符序列,后面跟着一个回车('\r')、一个换行('\n'),或者一个回车紧跟一个换行。结果字符串不包含终止回车和/或换行符。

ReadAllLines已经很好地为您删除了所有新行字符,并将每一行作为返回数组中的一个元素。这就是为什么IndexOf返回 -1 - 表示字符串中没有换行符。

要获得行的长度,您无需查找换行符的位置。只需使用line.Length

lineLength = line.Length;
Run Code Online (Sandbox Code Playgroud)

我尝试通过将 lineLength 设置为 line.Length 来使用 .length 但是当我将 lineLength 作为 line.substring 中的长度参数时,我收到一条错误消息,说“索引和长度必须指代字符串中的某个位置”?

那是因为这不是Substring工作方式。的第二个参数Substring是你想要的子串的长度,而不是结束索引。

在这种情况下,如果您想从头到尾进行子串化found + 2,您只需调用 的单参数重载Substring

line.Substring(found + 2)
Run Code Online (Sandbox Code Playgroud)