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