Как мне прописать первую букву имени и фамилии в C #?

Я использовал решение Marc Gravell и вроде этого, но я могу представить другую альтернативу.

Поскольку общие параметры выводятся из параметров, другой вариант заключается в том, чтобы вместо этого использовать параметр out для результата возвращаемого значения.

Это возможно в течение длительного времени, но сегодняшний C # позволяет объявить переменную inline, которую я считаю полезным для использования.

public static void Cast<T1, T2>(this T1 arg, out T2 result) where T2 : class where T1 : class
{
    result = arg as T2;
}

Вы можете назвать это следующим образом

objOfTypeT1.Cast(out Type2 objOfTypeT2);
139
задан Gilles 14 September 2012 в 17:59
поделиться

12 ответов

TextInfo.ToTitleCase() использует для своей выгоды первый символ в каждом маркере строки.
, Если нет никакой потребности поддержать Акроним Uppercasing, то необходимо включать ToLower().

string s = "JOHN DOE";
s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower());
// Produces "John Doe"

, Если CurrentCulture недоступен, используйте:

string s = "JOHN DOE";
s = new System.Globalization.CultureInfo("en-US", false).TextInfo.ToTitleCase(s.ToLower());

Посмотрите Ссылка MSDN для подробного описания.

256
ответ дан MikeTeeVee 14 September 2012 в 17:59
поделиться

CultureInfo. CurrentCulture. TextInfo. ToTitleCase ("мое имя");

возвраты ~ Мое Имя

, Но проблема все еще существует с именами как McFly, как указано ранее.

3
ответ дан David C 14 September 2012 в 17:59
поделиться

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

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

public string SentenceCase(string input)
{
    return input(0, 1).ToUpper + input.Substring(1).ToLower;
}
-1
ответ дан Michael Haren 14 September 2012 в 17:59
поделиться

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

public static string FirstLetterToUpper(this String input)
{
    return input = input.Substring(0, 1).ToUpper() + 
       input.Substring(1, input.Length - 1);
}
1
ответ дан FlySwat 14 September 2012 в 17:59
поделиться

МГц и Mac являются общими префиксами фамилии всюду по США, и существуют другие. TextInfo. ToTitleCase не обрабатывает те случаи и не должен использоваться с этой целью. Вот то, как я делаю его:

    public static string ToTitleCase(string str)
    {
        string result = str;
        if (!string.IsNullOrEmpty(str))
        {
            var words = str.Split(' ');
            for (int index = 0; index < words.Length; index++)
            {
                var s = words[index];
                if (s.Length > 0)
                {
                    words[index] = s[0].ToString().ToUpper() + s.Substring(1);
                }
            }
            result = string.Join(" ", words);
        }
        return result;
    }
7
ответ дан Jamie Ide 14 September 2012 в 17:59
поделиться

Самая прямая опция будет для использования функция ToTitleCase, которая доступна в.NET, которая должна заботиться об имени большую часть времени. Как edg, на который указывают там, является некоторыми именами, на которые он не будет работать, но они довольно редки поэтому, если Вы не нацелены на культуру, где такие имена распространены, что это не необходимо что-то, о чем необходимо волноваться слишком много.

Однако, если Вы не работаете с языком.NET, тогда он зависит от того, на что вход похож - если у Вас есть два отдельных поля для имени и фамилии тогда, можно просто использовать для своей выгоды первую букву более низкая остальная часть его с помощью подстрок.

firstName = firstName.Substring(0, 1).ToUpper() + firstName.Substring(1).ToLower();
lastName = lastName.Substring(0, 1).ToUpper() + lastName.Substring(1).ToLower();

Однако при обеспечении нескольких имен как части той же строки тогда необходимо знать, как Вы получаете информацию, и разделяет его соответственно. Таким образом, если Вы получаете имя как "John Doe" Вы разделение строка, основанная на пробеле. Если это находится в формате, таком как "Doe, John", Вы собираетесь должны разделить его основанный на запятой. Однако, как только у Вас есть он разделение независимо, Вы просто применяете код, показанный ранее.

4
ответ дан Community 14 September 2012 в 17:59
поделиться

ToTitleCase () должен работать на Вас.

http://support.microsoft.com/kb/312890

5
ответ дан ckal 14 September 2012 в 17:59
поделиться

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

2
ответ дан Tundey 14 September 2012 в 17:59
поделиться
CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");
118
ответ дан Nathan Baulch 14 September 2012 в 17:59
поделиться

Обойти некоторые проблемы/проблемы, которые имеют ben, выделилось, я предложу преобразовать строку в нижний регистр сначала и затем назову метод ToTitleCase. Вы могли тогда использовать IndexOf (" МГц") или 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
ответ дан jjclarkson 14 September 2012 в 17:59
поделиться

Этот класс добивается цели. Можно добавить новые префиксы к _prefixes статический массив строк.

public static class StringExtensions
{
        public static string ToProperCase( this string original )
        {
            if( String.IsNullOrEmpty( original ) )
                return original;

            string result = _properNameRx.Replace( original.ToLower( CultureInfo.CurrentCulture ), HandleWord );
            return result;
        }

        public static string WordToProperCase( this string word )
        {
            if( String.IsNullOrEmpty( word ) )
                return word;

            if( word.Length > 1 )
                return Char.ToUpper( word[0], CultureInfo.CurrentCulture ) + word.Substring( 1 );

            return word.ToUpper( CultureInfo.CurrentCulture );
        }

        private static readonly Regex _properNameRx = new Regex( @"\b(\w+)\b" );
        private static readonly string[] _prefixes = {
                                                         "mc"
                                                     };

        private static string HandleWord( Match m )
        {
            string word = m.Groups[1].Value;

            foreach( string prefix in _prefixes )
            {
                if( word.StartsWith( prefix, StringComparison.CurrentCultureIgnoreCase ) )
                    return prefix.WordToProperCase() + word.Substring( prefix.Length ).WordToProperCase();
            }

            return word.WordToProperCase();
        }
}
2
ответ дан Eddie Velasquez 14 September 2012 в 17:59
поделиться
String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test);

Приведенный выше код не будет работать .....

поэтому поместите приведенный ниже код, преобразовав его в меньшее, затем примените функцию

String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());
30
ответ дан 23 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: