![](/img/trans.png)
[英]How can I capitalize the first letter of each sentence in C# using char?
[英]C# Capitalize first letter in in each sentence in a string
我想将字符串中每个句子的第一个字母大写。 我有一个字符串,例如。 “你好,你好吗?我很好,你呢?我很好。天气不错!”
我想将其中每个句子的第一个字母大写。 所以,“你好,你好吗?我很好,你呢?” 等等
编辑:到目前为止,我刚刚尝试过
public static string FirstCharToUpper(string input)
{
if (String.IsNullOrEmpty(input))
throw new ArgumentException("ARGH!");
return input.First().ToString().ToUpper() + input.Substring(1);
}
但这将每个单词的第一个字母大写,而不是句子:/
我建议简单的方法,迭代字符串。
您也可以将其作为string
的扩展名。
public static class StringExtension
{
public static string CapitalizeFirst(this string s)
{
bool IsNewSentense = true;
var result = new StringBuilder(s.Length);
for (int i = 0; i < s.Length; i++)
{
if (IsNewSentense && char.IsLetter(s[i]))
{
result.Append (char.ToUpper (s[i]));
IsNewSentense = false;
}
else
result.Append (s[i]);
if (s[i] == '!' || s[i] == '?' || s[i] == '.')
{
IsNewSentense = true;
}
}
return result.ToString();
}
}
所以,您可以按照以下方式使用它
string str = "hello, how are you? i'm fine, you? i'm good. nice weather!".CapitalizeFirst();
所以str
等于
你好,你好吗? 我很好,你呢? 我很好。 好天气!
迭代字符串:创建一个包含停止字符的列表。
然后检查该字符串中的每个字母,如果它在列表中的话。 如果它在列表中,则在此之后将字符大写。
对于第一个字符,它总是大写的,你应该静态。
或者,你可以像丹说的那样做,它也有效。
Microsoft Outlook 2010提供了将所选文本格式化为句子大小写的选项,请转到格式化文本选项卡 - 字体组,您会在缩小字体选项旁边找到一个更改大小写选项,缩短很长一段时间,你需要这样的东西在你的代码发生,遗憾的是.net中没有定义内置属性。
但请查看堆栈溢出中已经发生的对话。 .NET方法将字符串转换为句子大小写
您将需要一个名为txtInput
的文本框和另一个名为txtOutput
的文本框。 然后运行此代码,例如按下按钮:
bool Upper = true;
foreach(char c in txtInput.Text)
{
if (Upper == true)
{
if (c == ' ')
{
txtOutput.Text += c;
continue;
}
txtOutput.Text += c.ToString().ToUpper();
Upper = false;
}
else
{
txtOutput.Text += c;
}
if (c == '?' || c == '!' || c == '.')
Upper = true;
}
截屏:
已经说过几次了,遍历字符数组。 这样做的主要原因是它保留了字符串结构而不是拆分、上/子字符串和连接。
下面处理一些场景,例如不要在数字后大写字母。 除了上面描述/解决的那些假设之外,它还做出了一些假设,希望它有所帮助。
public static string CapitalizeFirstLetterInEachSentence(string sentences, bool capitalizeFirstSentence = true)
{
bool capitalizeNextLetterOrDigit = capitalizeFirstSentence;
char[] characters = sentences.ToCharArray();
var len = characters.Length;
for (int i = 0; i < len; i++)
{
var character = characters[i];
switch (character)
{
case '.':
case '?':
case '!':
capitalizeNextLetterOrDigit = true;
continue;
}
if (capitalizeNextLetterOrDigit && char.IsLetterOrDigit(character))
{
capitalizeNextLetterOrDigit = false;
characters[i] = char.ToUpper(character);
}
}
return new string(characters);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.