【问题标题】:How to change a text's case first letter and the rest of the letters as you desire?如何根据需要更改文本的首字母和其余字母?
【发布时间】:2018-11-07 01:49:57
【问题描述】:

我遇到了一个我想要的文本大小写问题,我已经解决了,正如这个问题的答案所示。

问题是我无法使用内置函数将单词的第一个字母大写,同时保留所有其他字母的大小写。

我最终为答案部分中描述的问题创建了自己的函数。

【问题讨论】:

    标签: c# text


    【解决方案1】:

    你可以使用TextInfoToTitleCase()方法:

    static void Main()
    {
        TextInfo info = CultureInfo.CurrentCulture.TextInfo;
        string input = "some lowercase text";
        Console.WriteLine(info.ToTitleCase(input)); // Outputs 'Some lowercase text'
        Console.ReadKey(true);
    }
    

    【讨论】:

    • 这是一个怎样的答案?要求澄清应该是评论
    【解决方案2】:

    我已经制作了一个函数来处理任何人想要的任何类型的文本框。

    public class ChangeTextCaseType
    {
        public class GetChangeTextCaseType
        {
            public int// 0 - remain as it is, 1 - lower cased, 2 - upper cased, 3 - inverted case
                WordsFirstLetterCase
                , WordsRestLettersCase;
    
            public string SourceText;
        }
    
        public static string ChangeTextCase(GetChangeTextCaseType GetChangeTextCase)
        {
            GetChangeTextCaseType FunctionGet = GetChangeTextCase;
            string FunctionResult = "";
    
            if (FunctionGet.SourceText.Length > 0)
            {
                bool StartOfAWord = true;
    
                if (FunctionGet.SourceText[0] >= 'a' && FunctionGet.SourceText[0] <= 'z')
                {
                    StartOfAWord = false;
    
                    if (FunctionGet.WordsFirstLetterCase == 2 || FunctionGet.WordsFirstLetterCase == 3)
                        FunctionResult += (char)(FunctionGet.SourceText[0] - 32);
                    else
                        FunctionResult += FunctionGet.SourceText[0];
                }
                else
                {
                    if (FunctionGet.SourceText[0] >= 'A' && FunctionGet.SourceText[0] <= 'Z')
                    {
                        StartOfAWord = false;
    
                        if (FunctionGet.WordsFirstLetterCase == 1 || FunctionGet.WordsFirstLetterCase == 3)
                            FunctionResult += (char)(FunctionGet.SourceText[0] + 32);
                        else
                            FunctionResult += FunctionGet.SourceText[0];
                    }
                    else
                        FunctionResult += FunctionGet.SourceText[0];
                }
    
                for (int SourceTextIndex = 1; SourceTextIndex < FunctionGet.SourceText.Length; SourceTextIndex++)
                    if (FunctionGet.SourceText[SourceTextIndex] >= 'a' && FunctionGet.SourceText[SourceTextIndex] <= 'z')
                        if (StartOfAWord == true)
                        {
                            StartOfAWord = false;
    
                            if (FunctionGet.WordsFirstLetterCase == 2 || FunctionGet.WordsFirstLetterCase == 3)
                                FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] - 32);
                            else
                                FunctionResult += FunctionGet.SourceText[SourceTextIndex];
                        }
                        else
                        {
                            if (FunctionGet.WordsRestLettersCase == 2 || FunctionGet.WordsRestLettersCase == 3)
                                FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] - 32);
                            else
                                FunctionResult += FunctionGet.SourceText[SourceTextIndex];
                        }
                    else
                    {
                        if (FunctionGet.SourceText[SourceTextIndex] >= 'A' && FunctionGet.SourceText[SourceTextIndex] <= 'Z')
                            if (StartOfAWord == true)
                            {
                                StartOfAWord = false;
    
                                if (FunctionGet.WordsFirstLetterCase == 1 || FunctionGet.WordsFirstLetterCase == 3)
                                    FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] + 32);
                                else
                                    FunctionResult += FunctionGet.SourceText[SourceTextIndex];
                            }
                            else
                            {
                                if (FunctionGet.WordsRestLettersCase == 1 || FunctionGet.WordsRestLettersCase == 3)
                                    FunctionResult += (char)(FunctionGet.SourceText[SourceTextIndex] + 32);
                                else
                                    FunctionResult += FunctionGet.SourceText[SourceTextIndex];
                            }
                        else
                        {
                            if (StartOfAWord == false)
                                StartOfAWord = true;
    
                            FunctionResult += FunctionGet.SourceText[SourceTextIndex];
                        }
                    }
            }
    
            return FunctionResult;
        }
    }
    

    用法:

    string abc = "ABCd efG5-!rt %2r$b# RB";
    abc = TextTools.ChangeTextCaseType.ChangeTextCase(new TextTools.ChangeTextCaseType.GetChangeTextCaseType() { SourceText = abc, WordsFirstLetterCase = 2, WordsRestLettersCase = 1 });
    

    【讨论】:

    • 提示:StringBuilder
    • 您可能需要考虑使用char.ToUpperchar.IsLetterchar.IsLower 等方法。和枚举而不是幻数。
    • "école" 输出"éCole"
    • @John 我在这里没有涉及到 unicode,我认为这已经足够清楚了。
    • 一点都不清楚;你提到的只是“文本”。 é 不是 unicode,它是扩展的 ASCII。
    猜你喜欢
    • 1970-01-01
    • 2015-12-31
    • 2018-03-27
    • 2021-07-23
    • 1970-01-01
    • 2013-05-21
    • 2015-01-15
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多