字符串方法剪切字符串部分
本文关键字:字符串部 方法 字符串 | 更新日期: 2023-09-27 18:33:42
我构建了一个字符串生成器,如果它是大写的,可以在文本中添加空格。输入的句子看起来像这样:"这是ASentence。由于它以大写字母开头,字符串生成器会将句子修改为如下所示:"这是一个句子。
我的问题是,如果我有一个像"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;
当你使用"thisIsASentence"运行代码时,在你的foreach循环之后,结果将是"This Is A Sentence",因为它不会在开头插入空格。
然后你的下一行,将采用索引 1 处的字符(这是这里的"h"),使其大写,然后附加字符串的其余部分,结果为"他的是一个句子"
要解决此问题,您可以在循环后执行result = result.Trim()
,然后从索引 0 开始,使下一行result = result.Substring(0, 1).ToUpper() + result.Substring(1).ToLower();
使用 result.SubString(1,1)
时,您假设输入的第一个字母始终大写,因此您将始终在字符串的开头添加一个空格。您已经看到情况并非如此。
所以我基本上看到两个选项:
将该行包装在 if 块中,该块在替换之前检查空格;
将输入的第一个字母大写(如果您的规范允许)。