![](/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.