以下函數將在字符串中找到的任何大寫字符處拆分字符串。按大寫字母拆分字符串,但某些關鍵字除外
public static string ToSentence(this string input)
{
var list = new List<char>();
for (var i = 0; i < input.ToCharArray().Length; i++)
{
var c = input.ToCharArray()[i];
foreach (char c1 in i > 0 && char.IsUpper(c) ? new[] {' ', c} : new[] {c})
list.Add(c1);
}
return new string(list.ToArray());
}
在我的代碼中,這個函數與另一個函數一起使用,它檢索代碼中當前方法的名稱。當方法名稱按順序包含多個大寫字母時,我發現該函數會中斷。
舉例來說,如果我有一個名爲GetDatabaseIDE()
方法,它會返回爲"Get Database I D E"
我怎樣才能改變我的ToSentence
功能,使其接受,不會被拆分的關鍵字的列表(例如,I D E
變IDE
)?
取出'ToCharArray()'調用,你無意中創建了很多垃圾,因爲'string'本身允許下標。內部的foreach循環也非常複雜,因爲你正在做的事情。只要'if(something){list.Add(''); }/* always */list.Add(c);'會更快,也更容易理解。 –
順便說一句,你已經將問題描述爲「當輸入包含多個大寫字母時按順序打斷」 - 這比實現關鍵字列表更容易實現。雖然您可能想分割「IHaveBacon」,即使有順序大寫。 –
假設'IDE'是某個東西的首字母縮寫,更快的方法可能使用正則表達式完成:http://stackoverflow.com/questions/8495457/split-pascalcase-string-except-for-acronyms。 –