[英]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.