C# 句子大写
我正在痛苦地尝试一项编程任务。我不是在找一个,这是你怎么做的,但更多的是我做错了什么 我试图从字符串输入中大写每个句子的开头。例如,字符串Hello。我叫约翰。我喜欢骑自行车。我会修改字符串并返回大写字母,例如:Hello。我叫约翰。我喜欢骑自行车。我的逻辑似乎有点错误,我很迷茫 到目前为止我所拥有的一切。基本上我所做的就是测试一个表示句子结尾的标点符号。然后尝试替换角色。还测试它是否位于字符串末尾,以避免创建IndexOutfrange异常。尽管如此,我得到的只是:C# 句子大写,c#,char,sentence,C#,Char,Sentence,我正在痛苦地尝试一项编程任务。我不是在找一个,这是你怎么做的,但更多的是我做错了什么 我试图从字符串输入中大写每个句子的开头。例如,字符串Hello。我叫约翰。我喜欢骑自行车。我会修改字符串并返回大写字母,例如:Hello。我叫约翰。我喜欢骑自行车。我的逻辑似乎有点错误,我很迷茫 到目前为止我所拥有的一切。基本上我所做的就是测试一个表示句子结尾的标点符号。然后尝试替换角色。还测试它是否位于字符串末尾,以避免创建IndexOutfrange异常。尽管如此,我得到的只是: private strin
private string SentenceCapitalizer(string input)
{
for (int i = 0; i < input.Length; i++)
{
if (input[i] == '.' || input[i] == '!' || input[i] == '?')
{
if (!(input[i] == input.Length))
{
input.Replace(input[i + 2], char.ToUpper(input[i + 2]));
}
}
}
return input;
}
非常感谢您的帮助。我只是在学习C,所以最基本的帮助就是服务。我知道的不多:P
您正在检查当前索引是否小于或等于字符串的长度,然后尝试进一步修改索引2
if (!(input[i] == input.Length))
{
input.Replace(input[i + 2], char.ToUpper(input[i + 2]));
}
应改为
if (!((i + 2) >= input.Length))
{
input.Replace(input[i + 2], char.ToUpper(input[i + 2]));
}
这将检查标点符号后2处是否有一个值。还可以使用>=而不是==因为你跳2,你可能会跳过数组的长度,其中==仍然返回false,但没有索引。你正在检查当前索引是否小于或等于字符串的长度,然后尝试进一步修改索引2
if (!(input[i] == input.Length))
{
input.Replace(input[i + 2], char.ToUpper(input[i + 2]));
}
应改为
if (!((i + 2) >= input.Length))
{
input.Replace(input[i + 2], char.ToUpper(input[i + 2]));
}
这将检查标点符号后2处是否有一个值。也可以使用>=而不是==因为你跳2,你可能会跳过数组的长度,其中==仍然返回false,但没有索引。而不是
if (!(input[i + 2] >= input.Length))
应该是
if (!(i + 2 >= input.Length))
您正在比较索引,而不是字符,而不是
if (!(input[i + 2] >= input.Length))
应该是
if (!(i + 2 >= input.Length))
您正在比较索引,而不是字符字符串是不可变的,您不能:
var str = "123";
str.Replace('1', '2');
你必须做到:
var str = "123";
str = str.Replace('1', '2');
字符串是不可变的,您不能执行以下操作:
var str = "123";
str.Replace('1', '2');
你必须做到:
var str = "123";
str = str.Replace('1', '2');
好的,其他人已经为您提供了一些停止明显错误的指针,但是我将尝试给您一些关于如何最好地实现这一点的想法 这是一个值得思考的三步过程 把字符串分成句子 确保每个标记的第一个字符为大写 通过将标记重新连接在一起来重建字符串 1我将留给您想象,但最终的想法是使用字符串数组,每个元素根据您的要求表示一个句子 2和
// Upercase character 0, and join it to everything from character 1 onwards
var fixedToken = token[0].ToUpper(CultureInfo.CurrentCulture)
+ token.Substring(1);
3也很简单
// reconstruct string by joining all tokens with a space
var reconstructed = String.Join(" ",tokens);
好的,其他人已经为您提供了一些停止明显错误的指针,但是我将尝试给您一些关于如何最好地实现这一点的想法 这是一个值得思考的三步过程 把字符串分成句子 确保每个标记的第一个字符为大写 通过将标记重新连接在一起来重建字符串 1我将留给您想象,但最终的想法是使用字符串数组,每个元素根据您的要求表示一个句子 2和
// Upercase character 0, and join it to everything from character 1 onwards
var fixedToken = token[0].ToUpper(CultureInfo.CurrentCulture)
+ token.Substring(1);
3也很简单
// reconstruct string by joining all tokens with a space
var reconstructed = String.Join(" ",tokens);
哦,好的,谢谢。超出范围的异常已消失。它不像预期的那样工作哈哈,我想回到绘图板上。哦,好的,谢谢。超出范围的异常已消失。它不像预期的那样工作哈哈,回到绘图板上我想。如果你有缩写s.O.L.I.D怎么办。或省略号。。。在你的文本中?如果你有缩写S.O.L.I.D怎么办。或省略号。。。在你的文本中?