我有一个简单的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"
我必须缺少一些东西,但是找不到问题。
我需要帮助...
答案 0 :(得分:1)
问题在于您如何分割文本:
string[] splitContents = ogContent.Split("\r\n".ToCharArray());
通过调用.ToCharArray()
,您可以提供字符串可以分割的两种不同内容:\r
或\n
。当拆分遇到"first\r\nsecond"
时,它将产生3个项目:"first"
,""
和"second"
。
有两种方法可以解决此问题:
StringSplitOptions.RemoveEmptyEntries
:ogContent.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
-这将删除拆分产生的ant空条目。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一起使用。