首页 > 解决方案 > 在双分号之间添加空格的更好方法

问题描述

我的任务很简单:我在 C# 字符串中有一个 CSV 文件,用分号分隔。我需要为每个空单元格添加空格。A;B;;;;C;应该变成A;B; ; ; ;C;. 现在,我使用了两次替换方法:

csv = csv.Replace(";;", "; ;").Replace(";;", "; ;");

这是必要的,因为在第一遍中,它将替换任何出现的 ;; 之间有空格,但没有回溯,因此不会再次检查替换序列的第二个分号。因此,我最终会得到 a A;B; ;; ;C;,这不是我想要的。

有没有更优雅、更清晰、更少冗余的方法来解决该任务?

标签: c#stringreplace

解决方案


您可以尝试将字符串插入各个部分,然后使用(它需要)Split将空条目替换为空格,然后将条目返回Selectusing System.Linq;Join

var str = "A;B;;;;C";
var parts = str.Split(';').Select(p => string.IsNullOrEmpty(p) ? " " : p);

var result = string.Join(";", parts);

输出将如下A;B; ; ; ;C

与 OP 代码和Regex解决方案比较的基准测试结果:

在此处输入图像描述

什么是清晰和优雅的,由你决定。参考的基准代码如下

[SimpleJob]
public class Benchmark
{
    string input= "A;B;;;;C";

    [Benchmark]
    public string SplitJoinTest()
    {
        var parts = input.Split(';').Select(p => string.IsNullOrEmpty(p) ? " " : p);
        return string.Join(";", parts);
    }

    [Benchmark]
    public string DoubleReplaceTest()
    {
        return input.Replace(";;", "; ;").Replace(";;", "; ;");
    }

    [Benchmark]
    public string RegexTest()
    {
        return Regex.Replace(input, ";(?=;)", "; ");
    }
}

推荐阅读