簡體   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