разбивать строки на несколько строк, с новой строки?
У меня есть входящие данные, которые нужно разделить на несколько значений ... т. е.
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();
}