我已经构建了一个字符串构建器,如果它是大写的话,可以在文本中添加空格。输入的句子如下所示:“ThisIsASentence。”由于它以大写字母开头,字符串构建器会将句子修改为:“这是一个句子”。
我的问题是,如果我有一个像“thisIsASentence”这样的句子。字符串生成器将正常分隔句子:“这是句子。”
第一个角色前面都有空格。
当句子贯穿此行时:
result = result.Substring(1, 1).ToUpper() + result.Substring(2).ToLower();
如果输入的第一个字母是小写的,它将被截断,第二个字母变为大写。
该行旨在使第一个字母保持大写,并将其余字母设为小写。
在运行该行之前添加trim语句不会改变输出。
现在是我的整体代码:
private void btnChange_Click(object sender, EventArgs e)
{
// New string named sentence, assigning the text input to sentence.
string sentence;
sentence = txtSentence.Text;
// String builder to let us modify string
StringBuilder sentenceSB = new StringBuilder();
/*
* For every character in the string "sentence" if the character is uppercase,
* add a space before the letter,
* if it isn't, add nothing.
*/
foreach (char c in sentence)
{
if (char.IsUpper(c))
{
sentenceSB.Append(" ");
}
sentenceSB.Append(c);
}
// Store the edited sentence into the "result" string
string result = sentenceSB.ToString();
// Starting at the 2nd spot and going 1, makes the first character capitalized
// Starting at position 3 and going to end change them to lower case.
result = result.Substring(1, 1).ToUpper() + result.Substring(2).ToLower();
// set the label text to equal "result" and set it visible.
lblChanged.Text = result.ToString();
lblChanged.Visible = true;
答案 0 :(得分:1)
使用“thisIsASentence”运行代码时,在foreach循环之后,结果将是“this Is A Sentence”,因为它不会在开头插入空格。
然后你的下一行将把索引1处的字符(这是这里的'h'),将其设为大写,然后追加其余的字符串,从而产生“他是一个句子”
要解决此问题,您可以在循环后执行result = result.Trim()
,然后从索引0开始,生成下一行result = result.Substring(0, 1).ToUpper() + result.Substring(1).ToLower();
答案 1 :(得分:0)
使用result.SubString(1,1)
,您假设输入的第一个字母始终大写,因此您将始终在字符串的开头添加空格。你已经看到情况并非如此。
所以我基本上会看到两个选项:
在替换前检查空格的if块中包裹该行;
如果您的规范允许,请将输入的第一个字母大写。