C#实现Jaden Casing Strings时首字母大写功能失效问题咨询
C# Jaden Casing Strings 实现问题排查
我正在通过Code Wars练习巩固C#基础,当前处理Jaden Casing Strings题目,需求为将输入字符串中每个单词的首字母转换为大写,示例效果:This is my life now --> This Is My Life Now。
初始代码问题分析
初始编写的代码无法正常实现大写转换,代码如下:
public static string ToJadenCase(string phrase) { for (int i = 0; i < phrase.Length; i++) { char _first = phrase[0]; if (phrase[i] == ' ') { i++; char.ToUpper(phrase[i]); } else if(phrase[i] == _first) { char.ToUpper(phrase[i]); } } return phrase; }
错误原因
- C#中
string是不可变类型,调用char.ToUpper()仅会返回转换后的新字符,不会修改原字符串对应位置的字符,初始代码中没有存储转换后的字符,也没有生成新的字符串对象,因此原字符串不会发生任何变化。 - 首字符判断逻辑错误:通过
phrase[i] == _first判断是否为字符串首字符,若后续单词中存在和首字符相同的字符会被误触发转换逻辑,且即使触发逻辑也未正确保存转换结果。 - 缺少边界校验:如果输入字符串末尾为空格,执行
i++后访问phrase[i]会触发索引越界异常。
最终可用实现
参考调整后可正常运行的代码如下:
public static string ToJadenCase(string phrase) { List<char> _textlist = new List<char>(); _textlist.Add(char.ToUpper(phrase[0])); for (int i = 1; i < phrase.Length; i++) { if (phrase[i] == ' ') { _textlist.Add(phrase[i]); _textlist.Add(char.ToUpper(phrase[i + 1])); i++; } else { _textlist.Add(phrase[i]); } } return string.Join("",_textlist); }
内容的提问来源于stack exchange,提问作者AoLoim
相关产品推荐
相关产品推荐

