我正在尝试解决标题大写问题。我有一种方法可以接受一个句子,将其分解成单词,将这些单词与单词的检查单进行比较。数组字符串的循环迭代
基于此检查列表,如果它们在列表中,我将小写字母。大写字母不在列表中。第一个和最后一个单词总是大写。
这里是我的方法:
public string TitleCase(string title)
{
LinkedList<string> wordsList = new LinkedList<string>();
string[] listToCheck = { "a", "the", "to", "in", "with", "and", "but", "or" };
string[] words = title.Split(null);
var last = words.Length - 1;
var firstWord = CapitalizeWord(words[0]);
var lastWord = CapitalizeWord(words[last]);
wordsList.AddFirst(firstWord);
for (var i = 1; i <= last - 1; i++)
{
foreach (var s in listToCheck)
{
if (words[i].Equals(s))
{
wordsList.AddLast(LowercaseWord(words[i]));
}
else
{
wordsList.AddLast(CapitalizeWord(words[i]));
}
}
}
wordsList.AddLast(lastWord);
var sentence = string.Join(" ", wordsList);
return sentence;
}
与实例运行此并期待结果:
var result = TitleCase("i love solving problems and it is fun"); Assert.AreEqual("I Love Solving Problems and It Is Fun", result);
我得到相反:
"I Love Love Love Love Love Love Love Love Solving Solving Solving Solving Solving Solving Solving Solving Problems Problems Problems Problems Problems Problems Problems Problems And And And And And and And And It It It It It It It It Is Is Is Is Is Is Is Is Fun"
如果你仔细观察一个and
是小写。我如何解决这个问题的任何提示?
在'for'设置一个断点,然后调试代码然后按下“F10”来浏览它,看看发生了什么。 – Quantic
使用调试器并单步执行代码。随时留意你的单词列表是如何增长的,并且你会看到发生了什么问题...... – elgonzo