【问题标题】:split strings into many strings by newline?通过换行符将字符串拆分为多个字符串?
【发布时间】:2014-02-26 04:09:42
【问题描述】:

我有需要拆分为多个值的传入数据...即。

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?
    }
}

【问题讨论】:

  • 你尝试过任何东西吗?
  • 在你的标题中有答案string.Split
  • 我认为你的问题不是我们得到的。请尽量使这一点更清楚以获得解决方案。
  • 请记住,当您拆分字符串时,用作分隔符的字符会从结果字符串中删除。这是一个错字\r?你是说\n吗?

标签: c# string newline string-split


【解决方案1】:

您可以使用string.Split method。特别是我建议使用使用可能分隔符的字符串数组的重载。这是因为在换行符上拆分会带来一个独特的问题。在您的示例中,所有换行符都只是一个'\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);
    }
}

【讨论】:

  • 我了解如何使用它,但我想将每个结果字符串视为子字符串,以便我可以分析它们
  • 子字符串在数组结果中,每个都有自己的索引。对不起,不清楚,你能举个例子吗?
【解决方案2】:
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]

【讨论】:

  • 所以现在,我需要将这些值作为字符串返回,我如何每次评估它们?我不想只打印它们,我如何检索它们以分别分析每个>
  • @darthwillard last3DigitsList&lt;string&gt;。我不明白您所说的 how do i evaluate them every time 是什么意思,您是否要对其进行迭代。然后使用 for 循环。 foreach(var i in last3Digits)
【解决方案3】:

这个问题之前已经回答过了,看看这个帖子: Easiest way to split a string on newlines in .NET?

另一种方法是使用 StringReader:

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

【讨论】:

    【解决方案4】:

    你的答案是:theStringYouGot.Split('\n'); 在那里你得到一个字符串数组来做你的处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2011-06-14
      • 2011-11-29
      • 1970-01-01
      相关资源
      最近更新 更多