c# - 用换行符将字符串拆分成多个字符串?

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

最佳答案

您可以使用 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);
    }
}

关于c# - 用换行符将字符串拆分成多个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514387/

相关文章:

c++ - 无法在 std::unordered_set<const char *> 中找到转换为 const char * 的 std::string

c - fgets 不接受最后一个值?

java - Scanner 类中的 nextLine 方法不接受输入(Java)

python - 如何将其中包含换行符的字符串转换为 Python 中的列表?

java - 使用 equals 和 compareTo 进行字符串比较 - 哪个更快?

c# - Azure Function 引用混合模式程序集

c# - 有没有办法确定 "shuffle"事件监听器的调用顺序?

c# - 在 C# Winforms 上验证文本框的输入

python - 给定数字的最小排列

c# - 当从 DataTemplateSelector 显式返回 DataTemplate 时,为什么 DataTemplate 不能绑定(bind)到接口(interface)?