检测换行符在字符串中的位置:

8 c# string

我看到我的字符串是使用Visual Studio对象查看器:

"_profileIconId = 5\n            elo"
Run Code Online (Sandbox Code Playgroud)

我需要从开始到换行的地方获取文本.

这是我尝试过的,但IndexOf()方法返回-1,表示找不到换行符.

var stringEx = "_profileIconId = 5\n            elo";
var x = stringEx.IndexOf(Environment.NewLine);
stat.Name = tempName.Substring(0,x);
Run Code Online (Sandbox Code Playgroud)

有关如何实现这一目标的任何想法?

Ada*_*ras 16

这是因为Environment.NewLine代表\r\n(回车+换行),而你的源字符串中只有一个换行符.将第二行更改为:

var x = stringEx.IndexOf("\n");
Run Code Online (Sandbox Code Playgroud)


Dan*_*Tao 5

如果你只想要字符串的第一行,你可以这样做:

static string GetFirstLine(string text)
{
    using (var reader = new StringReader(text))
    {
        return reader.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

StringReader课程为您处理各种换行方案.从MSDN文档:

一行被定义为一个字符序列,后跟一个换行符("\n"),一个回车符("\ r"),或一个回车符后面紧跟一个换行符("\ r \n").

当然,如果你不想要构建一个新StringReader对象的开销(虽然我怀疑它是那么大),你可以自己实现类似的东西:

static string GetFirstLine(string text)
{
    int? newlinePos = GetIndex(text, "\r") ?? GetIndex(text, "\n");

    if (newlinePos.HasValue)
    {
        return text.Substring(0, newlinePos.Value);
    }

    return text;
}

// Not really necessary -- just a convenience method.
static int? GetIndex(string text, string substr)
{
    int index = text.IndexOf(substr);
    return index >= 0 ? (int?)index : null;
}
Run Code Online (Sandbox Code Playgroud)