以下函数将在字符串中找到的任何大写字符处拆分字符串。按大写字母拆分字符串,但某些关键字除外
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。 –