簡體   English   中英

C# 將字符串中每個句子的首字母大寫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM