调用String Split()时出现\和\\问题

时间:2012-08-09 12:02:09

标签: c#-4.0

我试图在换行符'\ n'

的基础上拆分一些字符串

我将此分隔符存储在resx文件中:

Name: RecordDelimiter
Value: \n

当我从.resx文件中检索此值时,它总是返回为'\ n'和 分割功能不会返回准确的结果 但是,当我尝试使用字符串“\ n”时,它工作正常

这是我的代码 -

private static void GetRecords()
{
    string recordDelimiter = @"\n";
    string recordDelimiter1 = "\n"; // only this returns correct result
    string recordDelimiter2 = ResourceFile.RecordDelimiter; //from resx file, returns \\n :-(
    string recordDelimiter3 = ResourceFile.RecordDelimiter.Replace("\\", @"\"); //try replacing \\n with \n

    string fileOutput = "aaa, bbb, ccc\naaa1, bbb1, ccc1\naaa2, bbb2, ccc2";

    string[] records = fileOutput.Split(new string[] { recordDelimiter }, StringSplitOptions.None);
    string[] records1 = fileOutput.Split(new string[] { recordDelimiter1 }, StringSplitOptions.None);
    string[] records2 = fileOutput.Split(new string[] { recordDelimiter2 }, StringSplitOptions.None);
    string[] records3 = fileOutput.Split(new string[] { recordDelimiter3 }, StringSplitOptions.None);

    int recordCount = records.Count();  //returns 1
    int recordCount1 = records1.Count();  //returns 3 -- only this returns correct result
    int recordCount2 = records2.Count();  //returns 1
    int recordCount3 = records3.Count();  //returns 1
}

我想在resx文件中保留分隔符。
如果我遗失了什么,有人可以指导吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

第二种方法是唯一一种返回正确结果的方法是它是唯一一个分隔符是新行字符的方法。 “\ n”只是C#中换行符的表示,@“\ n”是斜杠的字符串,后跟字母n。换句话说@“\ n”!=“\ n”。

因此,如果您想在resx中存储分隔符,则需要向我们展示如何将分区存储在那里。目前它似乎只是作为文字字符串的stord,而不是实际的控制字符。

一个(非常粗略的)修复是从资源中获取字符串并调用.Replace(@“\ n”,“\ n”),具体取决于文件中存储的内容。如果/当我找到更好的解决方案,或者您更新了问题后,我会更新我的答案。

编辑:

好的,找到了一个有点花哨的解决方案。核心问题是你如何写\ n,正确吗?好吧,我用一个文本框和下面的代码制作了一个测试项目:

this.textBox1.Text = "1\n2";

启动此项目,选择文本框中的所有文本,然后复制到剪贴板。然后转到真实项目的资源,并粘贴剪贴板中的值。然后小心地删除控制字符周围的数字。然后你去,\ n控制资源字符串中的字符。 (数字的原因是无法从文本框中仅选择控制字符。)