private string FinishFixingName(string name) { // Edge case: prefix "as", suffix "sa", name "asa" if (Suffix.Length + Prefix.Length >= name.Length) { return(name); } name = name.Substring(Prefix.Length, name.Length - Suffix.Length - Prefix.Length); IEnumerable <string> words = new[] { name }; if (!string.IsNullOrEmpty(WordSeparator)) { words = name.Split(new[] { WordSeparator }, StringSplitOptions.RemoveEmptyEntries); if (words.Count() == 1) // Only Split if words have not been split before { bool isWord = true; var parts = StringBreaker.GetParts(name, isWord); string[] newWords = new string[parts.Count]; for (int i = 0; i < parts.Count; i++) { newWords[i] = name.Substring(parts[i].Start, parts[i].End - parts[i].Start); } words = newWords; } } words = ApplyCapitalization(words); return(Prefix + string.Join(WordSeparator, words) + Suffix); }