Определение местоположения новой строки в строке: - PullRequest
7 голосов
/ 23 января 2011

Я вижу с помощью средства просмотра объектов 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 ]

15 голосов
/ 23 января 2011

Это потому, что Environment.NewLine представляет \r\n (возврат каретки + перевод строки), тогда как в исходной строке у вас есть только перевод строки.Измените вторую строку следующим образом:

var x = stringEx.IndexOf("\n");
5 голосов
/ 23 января 2011

Если вы просто хотите первую строку строки, вы можете сделать это:

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

Класс 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;
}
1 голос
/ 23 января 2011

Если вы работаете на платформе Windows, Environment.NewLine будет искать "\ r \ n".

Попробуйте вместо \ n найти:

var x = stringEx.IndexOf("\n");
0 голосов
/ 04 мая 2017

Вот общий способ сделать это, что удалит новую строку и все после нее из строки, но только если в строке существует новая строка:

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

if (x > 0) {
  stringEx= stringEx.Remove(x);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...