繁体   English   中英

在C#中修剪字符串的最快方法

[英]The fastest way to trim string in C#

我需要修剪成百万个字符串的路径,如下所示:

C:\workspace\my_projects\my_app\src\my_component\my_file.cpp

src\my_component\my_file.cpp

即删除路径的绝对部分,最快的方法是什么?

我尝试使用正则表达式:

Regex.Replace(path,  @"(.*?)\src", ""),

我不会为此使用正则表达式,请使用普通的旧方法。

如果路径前缀始终相同:

const string partToRemove = @"C:\workspace\my_projects\my_app\";

if (path.StartsWith(partToRemove, StringComparison.OrdinalIgnoreCase))
    path = path.Substring(partToRemove.Length);

如果前缀是变量,则可以获取\\src\\的最后一个索引:

var startIndex = path.LastIndexOf(@"\src\", StringComparison.OrdinalIgnoreCase);
if (startIndex >= 0)
    path = path.Substring(startIndex + 1);

用新的定义正则表达式并重用它
创建正则表达式需要(大量)成本

string input = "This is   text with   far  too   much   " + 
                     "whitespace.";
string pattern = "\\s+";
string replacement = " ";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);

想不到比这快

path.Substring(33);

src之前是恒定的。 它从索引33开始。

C:\workspace\my_projects\my_app\src\my_component\my_file.cpp
                                    ^

如果不是总是恒定的,该怎么办。 您可以找到一次。 并在循环内进行其余操作。

int startInd = path.IndexOf(@"\src\") + 1;

// Do this inside loop. 1 million times
path.Substring(startInd);

如果您的文件都以“ src / filename.ext”结尾,则可以使用.NET框架中的Path类来解决所有有关路径和文件名的注意事项:

result = "src\" + Path.GetFileName(path);

因此,您应该首先仔细检查转换是否需要很长时间。

我不确定在这里是否需要速度,但是如果始终获得完整路径,则可以执行简单的.Substring()

var path = @"C:\workspace\my_projects\my_app\src\my_component\my_file.cpp";
Console.WriteLine(path.Substring(32));

但是,我认为您应该先清理输入内容; 在这种情况下, Uri类可以执行解析步骤:

var root = @"C:\workspace\my_projects\my_app\";
var path = @"C:\workspace\my_projects\my_app\src\my_component\my_file.cpp";
var relative = new Uri(root).MakeRelativeUri(new Uri(path));
Console.WriteLine(relative.OriginalString.Replace("/", "\\"));

请注意,此处Uri将使用/更改\\ ,这就是.Replace原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM