向结果添加意外字符

时间:2018-10-19 04:36:53

标签: c#

我有一个简单的wpf应用程序函数,该函数在长度大于4500之前合并文本框行,然后将合并的字符串添加到列表中并重复。

    public static void MyFunction(string ogContent, TextBox t)
    {
        List<string> splitCheckedContents = new List<string>();

        string[] splitContents = ogContent.Split("\r\n".ToCharArray());

        for (int j = 0; j < splitContents.Length; j++)
        {
            string stackString = "";
            do
            {
                stackString = stackString + "\\n" + splitContents[j++].Replace("\"", "\\\"");
            } while (j < splitContents.Length && (stackString.Length + splitContents[j].Length + 2) < 4500);
            splitCheckedContents.Add(stackString);
        }
        t.Text = "";
        foreach (string s in splitCheckedContents)
        {
            t.Text += s;
        }
    }

所以当我输入

first second third

我希望输出为

splitCheckedContents[0] = "\nfirst\nsecond\nthird"

但是我得到

"\nfirst\n\nsecond\n\nthird"

我必须缺少一些东西,但是找不到问题。

我需要帮助...

1 个答案:

答案 0 :(得分:1)

问题在于您如何分割文本:

string[] splitContents = ogContent.Split("\r\n".ToCharArray());

通过调用.ToCharArray(),您可以提供字符串可以分割的两种不同内容:\r\n。当拆分遇到"first\r\nsecond"时,它将产生3个项目:"first""""second"

有两种方法可以解决此问题:

  1. 指定StringSplitOptions.RemoveEmptyEntriesogContent.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);-这将删除拆分产生的ant空条目。
  2. 更改您要分割的内容:ogContent.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);-这将在Windows样式的换行符和Unix样式的换行符之间进行分割。

使用选项#2填写代码:

public static void MyFunction(string ogContent, TextBox t)
{
    List<string> splitCheckedContents = new List<string>();

    string[] splitContents = ogContent.Split(ogContent.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

    for (int j = 0; j < splitContents.Length; j++)
    {
        string stackString = "";
        do
        {
            stackString = stackString + "\\n" + splitContents[j++].Replace("\"", "\\\"");
        } while (j < splitContents.Length && (stackString.Length + splitContents[j].Length + 2) < 4500);
        splitCheckedContents.Add(stackString);
    }
    t.Text = "";
    foreach (string s in splitCheckedContents)
    {
        t.Text += s;
    }
}

请注意,如果需要,还可以将StringSplitOptions.RemoveEmptyEntries与选项2一起使用。