字符要用c#大写.Jaden套管字符串



这是我第一个问题。我想通过做代码战争练习来提高我的基础知识,我应该把每个单词的第一个字符改为大写。

例子:这就是我现在的生活——>这就是我现在的生活

这是我的代码,但大写似乎不能正常工作。为什么?

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;
}

谢谢大家!从你的回答,我能够创建一个工作方法。很高兴加入这样的社区。

我最后的代码使用了一个列表来完成这个工作,它不是很漂亮,但它通过了。

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);
}

有多种方法,但您的代码倾向于数组操作。我们可以使用StringBuilder来辅助简单的基于数组的替换:

这是在这里描述的c#替换或删除Char by Index

public static string ToJadenCase(string phrase)
{
// record the output as we process the input
var output = new System.Text.StringBuilder(phrase);
char _first = phrase[0];
for (int i = 0; i < phrase.Length; i++)
{
if (phrase[i] == ' ')
{
i++;
output[i] = char.ToUpper(phrase[i]);
}
else if(phrase[i] == _first)
{
output[i] = char.ToUpper(phrase[i]);
}
}
return output.ToString();
}

注意:我只是把你的逻辑转置在这里,我不保证你会通过这个测试用例,你应该检查边界条件,如null或空字符串传递给phrase,或以空格开头的字符串…

我也不确定与第一个字符的比较是为了什么,所以我不会评论它,作为Code WarsHackerrank的问题,我相信你的话,这是要求的一部分。

如果没有特定的附加条件,则应该这样做:

public static void Main()
{
var c = "to jaden case";        
var str = c.Split(' ')
.Select(x => x.Length > 1 ? Char.ToUpper(x[0]) + x[1..] : x.ToUpper());

var result = string.Join(' ', str);
Console.WriteLine(result);
}

如果需要,你也可以,在字符串分割后,如果有一个字符串的大小写放在不同的地方,你也可以将所有的部分转换为小写。在连接多个空格时,还有一个关于额外的空白字符的问题,但对于这个问题,我将其省略。

你可以用非常简单的方式使用StringBuilder,如下所示

public static string ToJadenCase(string phrase)
{
if (phrase.Length == 0)
Console.WriteLine("Empty string");
string[] WordsList = phrase.Split();
StringBuilder builder = new StringBuilder();
foreach (var word in WordsList)
{
builder.Append(char.ToUpper(word[0]) + word.Substring(1)).Append(" ");

}
return builder.ToString();
}

最新更新