gpt4 book ai didi

c# - 如何使用 .NET 获取字符串中的行数(带任何换行符)

转载 作者:行者123 更新时间:2023-11-30 13:55:32 24 4
gpt4 key购买 nike

我需要计算字符串中的行数。任何换行符都可以是字符串中可以出现的字符(CR、LF 或 CRLF)。

So possible new line chars:
* \n
* \r
* \r\n

例如,使用以下输入:

This is [\n]
an string that [\r]
has four [\r\n]
lines

该方法应返回 4 行。您是否知道任何内置函数,或者有人已经实现了它?

static int GetLineCount(string input)
{
// could you provide a good implementation for this method?
// I want to avoid string.split since it performs really bad
}

注意:性能对我来说很重要,因为我可以读取大字符串。

最佳答案

int count = 0;
int len = input.Length;
for(int i = 0; i != len; ++i)
switch(input[i])
{
case '\r':
++count;
if (i + 1 != len && input[i + 1] == '\n')
++i;
break;
case '\n':
// Uncomment below to include all other line break sequences
// case '\u000A':
// case '\v':
// case '\f':
// case '\u0085':
// case '\u2028':
// case '\u2029':
++count;
break;
}

简单地扫描,计算换行符,在 \r 的情况下,测试下一个字符是否为 \n,如果是则跳过它。

Performance is important for me, because I could read large strings.

如果可能的话,完全避免读取大字符串。例如。如果它们来自流,这很容易直接在流上执行,因为只需要一个字符的预读。

这是另一种不计算字符串末尾换行符的变体:

int count = 1;
int len = input.Length - 1;
for(int i = 0; i < len; ++i)
switch(input[i])
{
case '\r':
if (input[i + 1] == '\n')
{
if (++i >= len)
{
break;
}
}
goto case '\n';
case '\n':
// Uncomment below to include all other line break sequences
// case '\u000A':
// case '\v':
// case '\f':
// case '\u0085':
// case '\u2028':
// case '\u2029':
++count;
break;
}

因此,这考虑了 """a line""a line\n""a line\r\n" 每行只有一行,依此类推。

关于c# - 如何使用 .NET 获取字符串中的行数(带任何换行符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33374444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com