我的任务很简单:我在 C# 字符串中有一个 CSV 文件,用分号分隔。我需要为每个空单元格添加空格。A;B;;;;C;
应该成为A;B; ; ; ;C;
. 现在,我使用了两次替换方法:
csv = csv.Replace(";;", "; ;").Replace(";;", "; ;");
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为在第一遍中,它将替换任何出现的 ;; 之间有一个空格,但没有回溯,因此不会再次检查替换序列的第二个分号。因此,我最终会得到 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);
Run Code Online (Sandbox Code Playgroud)
输出将如下 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, ";(?=;)", "; ");
}
}
Run Code Online (Sandbox Code Playgroud)
一种方法是使用正则表达式。
using System.Text.RegularExpressions;
var result = Regex.Replace("A;B;;;;C;", ";(?=;)", "; ");
Run Code Online (Sandbox Code Playgroud)
我们用字符串 替换每个分号后跟另一个分号"; "
。
它绝对不那么多余,如果您知道如何阅读正则表达式就很清楚了:) 是否更优雅由您决定。
归档时间: |
|
查看次数: |
273 次 |
最近记录: |