2011-03-23 56 views
1

這可能是很簡單,但想知道之間的檢索字符串,沒有任何替代品找到一個源字符串,通過它傳遞開始和結束串從源字符串,它是2串

之間的串以下代碼是可以實現的,但是這裏有比這更好的代碼,因爲我認爲如果在很多條件下使用,這會使系統變慢。

string strSource = "The LoadUserProfile call failed with the following error: "; 
    string strResult = string.Empty; 
    string strStart = "loaduserProfile"; 
    string strEnd = "error"; 

    int startindex = strSource.IndexOf(strStart, StringComparison.OrdinalIgnoreCase); 
    int endindex = strSource.LastIndexOf(strEnd, StringComparison.OrdinalIgnoreCase); 

    startindex = startindex + strStart.Length; 

    int endindex = endindex - startindex; 
    strResult = strSource.Substring(startindex, endindex); 

感謝 D.Mahesh

回答

0

你的代碼是美麗的地方,對字符串操作。我不認爲它可以在算法上變得更快。你也可以使用正則表達式來做到這一點,但我不認爲在這種情況下結果會更快。

如果您不需要區分大小寫,將StringComparison.OrdinalIgnoreCase更改爲StringComparison.Ordinal應該提供一些加速。

否則,您可能不得不在其他地方尋找速度改進。

+0

一個正則表達式的方法可能會產生的C#代碼更少,但。 OP應該調查是否可以直接從不同的和結構化的源獲得所需的字符串(信息)。 – 2011-03-23 11:33:59

+1

使用正則表達式的代碼行數可能會更少,但速度不會更快,並且它是否會更容易理解是值得懷疑的。 – Gabe 2011-03-23 12:12:26

1

使用正則表達式並找到組值,但不確定是否會更快或更慢。

下面是一個例子代碼來實現這個使用正則表達式(無VS,所以藉口如果有語法錯誤)

string pattern = Regex.Escape(strStart) + "(?<middle>[\s\S]*)" + Regex.Escape(strEnd); 
Match match = Regex.Match(strSource, pattern); 
if (match.Success) 
{ 
    // read the group value matches the name "middle" 
    ...... 
}