разбивать строки на несколько строк, с новой строки?

У меня есть входящие данные, которые нужно разделить на несколько значений ... т. е.

2345n564532n345634n234 234543n1324 2435 n

длина непоследовательна, когда я получаю ее, интервал непоследователен, когда он присутствует, и я хочу проанализировать последние 3 цифры перед каждым n. как я могу разорвать строку и превратить ее в новую строку? как я уже сказал, в этом раунде может быть 3 N команд, в следующий раз может быть 10, Как создать 3 новых строки, проанализируйте их, а затем уничтожьте до прихода следующих 10?

string[] result = x.Split('r');
result = x.Split(splitAtReturn, StringSplitOptions.None);
string stringToAnalyze = null;

foreach (string s in result)
{
    if (s != "r")
    {
        stringToAnalyze += s;
    }
    else
    {

          how do i analyze the characters here?
    }
}

4 ответов


можно использовать строку.Сплит способ. В частности, я предлагаю использовать перегрузку, которая использует строковый массив возможных разделителей. Это потому, что разделение на символ представляет собой уникальную проблему. В вашем примере все символы новой строки-это просто "\n", но для некоторых ОС символ новой строки - "\r\n", и если вы не можете исключить возможность наличия двоек в одном файле, то

string test = "2345\n564532\n345634\n234 234543\n1324 2435\n";
string[] result = test.Split(new string[] {"\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);

вместо этого, если вы уверены, что файл содержит только разделитель новой строки разрешен вашей ОС, тогда вы можете использовать

string test = "2345\n564532\n345634\n234 234543\n1324 2435\n";
string[] result = test.Split(new string[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries);

StringSplitOptions.RemoveEmptyEntries позволяет захватить пару последовательных новой строки или конечной новой строки в качестве пустой строки.

теперь вы можете работать над массивом, изучая последние 3 цифры каждой строки

foreach(string s in result)
{
    // Check to have at least 3 chars, no less
    // otherwise an exception will occur
    int maxLen = Math.Min(s.Length, 3);
    string lastThree = s.Substring(s.Length - maxLen, maxLen);

    ... work on last 3 digits 
}

вместо этого, если вы хотите работать только с индексом символа новой строки без разделения исходной строки, вы можете использовать string.IndexOf в этом путь

string test = "2345\n564532\n345634\n234 234543\n1324 2435\n";
int pos = -1;
while((pos = test.IndexOf('\n', pos + 1)) != -1)
{
    if(pos < test.Length)
    {
        string last3part = test.Substring(pos - 3, 3);
        Console.WriteLine(last3part);
    }
}

string lines = "2345\n564532\n345634\n234 234543\n1324 2435\n";
var last3Digits = lines.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                  .Select(line => line.Substring(line.Length - 3))
                  .ToList();

foreach(var my3digitnum in last3Chars)
{

}

last3Digits:[345, 532, 634, 543, 435]


на это был дан ответ раньше, проверьте этот поток: самый простой способ разбить строку на новые строки в .NET?

альтернативным способом является использование StringReader:

using (System.IO.StringReader reader = new System.IO.StringReader(input)) {
    string line = reader.ReadLine();
}

ваш ответ: theStringYouGot.Split('\n'); где вы получаете массив строк для обработки.