c# - 在双分号之间添加空格的更好方法
问题描述
我的任务很简单:我在 C# 字符串中有一个 CSV 文件,用分号分隔。我需要为每个空单元格添加空格。A;B;;;;C;
应该变成A;B; ; ; ;C;
. 现在,我使用了两次替换方法:
csv = csv.Replace(";;", "; ;").Replace(";;", "; ;");
这是必要的,因为在第一遍中,它将替换任何出现的 ;; 之间有空格,但没有回溯,因此不会再次检查替换序列的第二个分号。因此,我最终会得到 a A;B; ;; ;C;
,这不是我想要的。
有没有更优雅、更清晰、更少冗余的方法来解决该任务?
解决方案
您可以尝试将字符串插入各个部分,然后使用(它需要)Split
将空条目替换为空格,然后将条目返回Select
using 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, ";(?=;)", "; ");
}
}
推荐阅读
- javascript - ag-grid:根据rowNode内容在fullRow编辑和单单元格编辑之间切换
- javascript - 使用 Java 读出 Javascript 生成的内容
- git - 从 Dev 到 Master 的 Azure DevOps 拉取请求正在获取旧代码
- python - Pyinstaller 难以通过 Kivy 构建 FileChooserListView
- npm - 如何将所有常用组件作为存储库进行管理
- amazon-web-services - 我可以将 AWS Lambda 的调用分散在 5 分钟的时间间隔内吗?
- hex - 这个十六进制数据是否存在有意义的非十六进制数字确实存在的模式?
- apache-kafka - 根据有效负载将消息路由到不同的 Kafka 主题
- c - 如何以更快的速度打印像素阵列?
- html - 我的浏览器无法正确显示此字体