换行将字符串拆分成多个字符串?

dar*_*ard 7 c# string newline string-split

我有传入的数据,需要分成多个值...即.

2345 \n564532 \n345634 \n234 234543 \n1324 2435 \n

当我收到它时,长度是不一致的,当它存在时间距是不一致的,我想分析每个\n之前的最后3位数.如何断开字符串并将其转换为新字符串?就像我说的,这一轮,它可能有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?
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 24

您可以使用string.Split方法.特别是我建议使用使用可能分隔符的字符串数组的重载.这是因为拆分换行符会带来一个独特的问题.在你的例子中,所有换行符都只是一个'\n',但是对于某些操作系统,换行符字符是'\ r \n',如果你不能排除在同一个文件中有两个字符串的可能性那么

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

相反,如果您确定该文件仅包含您的操作系统允许的换行符分隔符,那么您可以使用

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

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 
}
Run Code Online (Sandbox Code Playgroud)

相反,如果你只想使用换行符的索引而不拆分原始字符串,你可以用这种方式使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)