Как мне прописать первую букву имени и фамилии в C #? - PullRequest
139 голосов
/ 16 сентября 2008

Есть ли простой способ сделать заглавной первую букву строки и опустить ее? Есть ли встроенный метод или мне нужно сделать свой собственный?

Ответы [ 17 ]

2 голосов
/ 16 сентября 2008

Предложения по использованию ToTitleCase не будут работать для строк, которые имеют верхний регистр. Поэтому вам придется вызывать ToUpper для первого символа и ToLower для остальных символов.

1 голос
/ 16 сентября 2008

Если вы используете vS2k8, вы можете использовать метод расширения, чтобы добавить его в класс String:

public static string FirstLetterToUpper(this String input)
{
    return input = input.Substring(0, 1).ToUpper() + 
       input.Substring(1, input.Length - 1);
}
0 голосов
/ 30 ноября 2016
 public static string ConvertToCaptilize(string input)
        {
            if (!string.IsNullOrEmpty(input))
            {
                string[] arrUserInput = input.Split(' ');


                // Initialize a string builder object for the output
                StringBuilder sbOutPut = new StringBuilder();


                // Loop thru each character in the string array
                foreach (string str in arrUserInput)
                {
                    if (!string.IsNullOrEmpty(str))
                    {
                        var charArray = str.ToCharArray();
                        int k = 0;
                        foreach (var cr in charArray)
                        {
                            char c;
                            c = k == 0 ? char.ToUpper(cr) : char.ToLower(cr);
                            sbOutPut.Append(c);
                            k++;
                        }


                    }
                    sbOutPut.Append(" ");
                }
                return sbOutPut.ToString();
            }
            return string.Empty;

        }
0 голосов
/ 02 января 2013

Надеюсь, это поможет вам.

String fName = "firstname";
String lName = "lastname";
String capitalizedFName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(fName);
String capitalizedLName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(lName);
0 голосов
/ 13 сентября 2012

Мне нравится так:

using System.Globalization;
...
TextInfo myTi = new CultureInfo("en-Us",false).TextInfo;
string raw = "THIS IS ALL CAPS";
string firstCapOnly = myTi.ToTitleCase(raw.ToLower());

Поднято из этой статьи MSDN .

0 голосов
/ 16 сентября 2008

Чтобы обойти некоторые из проблем / проблем, которые были выделены, я бы предложил сначала преобразовать строку в нижний регистр, а затем вызвать метод ToTitleCase. Затем вы можете использовать IndexOf ("Mc") или IndexOf ("O \ '") для определения особых случаев, требующих более пристального внимания.

inputString = inputString.ToLower();
inputString = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(inputString);
int indexOfMc = inputString.IndexOf(" Mc");
if(indexOfMc  > 0)
{
   inputString.Substring(0, indexOfMc + 3) + inputString[indexOfMc + 3].ToString().ToUpper() + inputString.Substring(indexOfMc + 4);
}
0 голосов
/ 16 сентября 2008

Как указано в edg, вам понадобится более сложный алгоритм для обработки специальных имен (возможно, поэтому во многих местах все вводится в верхнем регистре).

Что-то вроде этого непроверенного c # должно обрабатывать простой случай, который вы запросили:

public string SentenceCase(string input)
{
    return input(0, 1).ToUpper + input.Substring(1).ToLower;
}
...