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

时间:2011-01-23 20:20:43

标签: c# string

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

"_profileIconId = 5\n            elo"

我需要从开头到换行符的位置获取文本。

这是我尝试过的,但是IndexOf()方法返回-1,意味着找不到换行符。

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

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

4 个答案:

答案 0 :(得分:15)

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

var x = stringEx.IndexOf("\n");

答案 1 :(得分:5)

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

static string GetFirstLine(string text)
{
    using (var reader = new StringReader(text))
    {
        return reader.ReadLine();
    }
}

StringReader课程为您处理各种换行方案。来自the MSDN documentation

  

一条线被定义为一系列   字符后跟换行符   (“\ n”),回车(“\ r”)或a   马车返回后立即   通过换行符(“\ 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;
}

答案 2 :(得分:1)

如果您在Windows平台上运行,Environment.NewLine将查找“\ r \ n”。

尝试寻找\ n而不是:

var x = stringEx.IndexOf("\n");

答案 3 :(得分:0)

这是执行此操作的一般方法,从字符串中删除一个新行及其后的所有内容,但仅当字符串中存在新行时才会这样做:

int x = stringEx.IndexOf("\n");

if (x > 0) {
  stringEx= stringEx.Remove(x);
}