首页 > 解决方案 > 如何在不删除空行的情况下删除重复字符串?C#

问题描述

我正在使用内置函数来删除重复行,但函数将空白行也视为重复行。谁能帮我找到我错的地方?这是我的代码:

 protected void Remove_Duplicate_Lines_Click(object sender, EventArgs e)
    {          
       (Remove_Empty_Lines_CheckBox_id.Checked)      // Remove Blank Rows

         String input_txt = "A \n\n B \n \n B \n\n C \n\n C \n\n D \n\n E";

                string[] distinctLines = input_txt.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Distinct().ToArray(); 
                txt_output.InnerText = string.Join("\r\n", distinctLines);}

例子: 在此处输入图像描述

示例 2(不需要)

在此处输入图像描述

标签: c#string

解决方案


有一些问题,主要是你的分裂。您撰写input__txt包含“\n”,但后来尝试拆分Environment.NewLine,它本身就是“\n\r”。因此,分裂不会如你所愿。

让我们考虑一下:

String input_txt = "A \n A \n B \n D \n A \n E";

其次,即使您在“\n”上进行拆分,结果也会有 2 个 A 条目,即“A”和“A”,因为您没有修剪任何内容。

我的建议是拆分超过 1 个模式并删除空条目。要么您还需要 Trim() 每个项目,否则只需在拆分模式中添加“”。最终结果在条目之间不会有任何空行。要在以后需要时控制空行,请在需要输出时自己执行此操作。

String input_txt = "A \n A \n B \n D \n A \n E";

string[] distinctLines = input_txt.Split(new string[] { Environment.NewLine, "\n", " " }, StringSplitOptions.RemoveEmptyEntries)
                                    .Select(x => x.Trim())
                                    .Distinct()
                                    .ToArray();
txt_output.InnerText = string.Join(Environment.NewLine + Environment.NewLine, distinctLines);

这将输出:

A

B

D

E

推荐阅读