programing

C#에서 이름과 성의 첫 글자를 대문자로 쓰는 방법은 무엇입니까?

sourcejob 2023. 10. 16. 21:49
반응형

C#에서 이름과 성의 첫 글자를 대문자로 쓰는 방법은 무엇입니까?

문자열의 첫 글자를 대문자로 만들고 나머지를 낮추는 쉬운 방법이 있습니까?내장된 방법이 있습니까? 아니면 직접 만들어야 합니까?

TextInfo.ToTitleCase()문자열의 각 토큰에 있는 첫 번째 문자를 대문자로 바꿉니다.
를 유지할 다를 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 링크를 참조하십시오.

CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello world");
String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test);

위의 코드는 작동하지 않습니다.....

그래서 아래 코드를 lower로 변환해서 입력하고 함수를 적용합니다.

String test = "HELLO HOW ARE YOU";
string s = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(test.ToLower());

인 .CultureInfo.CurrentCulture.TextInfo.ToTitleCase할 수 예: 음피:예)'.

string input = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("o'reilly, m'grego, d'angelo");
// input = O'reilly, M'grego, D'angelo

regex를 사용할 수도 있습니다.\b[a-zA-Z]합니다 합니다.\b, 그 다음 방법 덕분에 일치를 대문자 동치로 대체하면 됩니다.

string input = "o'reilly, m'grego, d'angelo";
input = Regex.Replace(input.ToLower(), @"\b[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo

예를 들어, 필요에 따라 regex를 조정할 수 있습니다. 예를 들어, 우리가 처리하기를 원한다면.MacDonald그리고.McFry우:(?<=\b(?:mc|mac)?)[a-zA-Z]

string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z]", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald'S, McFry

를 더 하면 됩니다.(?:mc|mac)를 들어 , 합니다.du, de:(?:mc|mac|du|de).

마지막으로, 우리는 이 regex가 또한 그 경우와 일치할 것이라는 것을 깨달을 수 있습니다.MacDonald'Sr 동안's그래서 우리는 부정적인 시선으로 레지렉스에서 해결해야 합니다.(?<!'s\b). 마지막으로 다음과 같은 사항이 있습니다.

string input = "o'reilly, m'grego, d'angelo, macdonald's, mcfry";
input = Regex.Replace(input.ToLower(), @"(?<=\b(?:mc|mac)?)[a-zA-Z](?<!'s\b)", m => m.Value.ToUpper());
// input = O'Reilly, M'Grego, D'Angelo, MacDonald's, McFry

맥(Mc)과 맥(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;
    }

ToTitleCase()가 사용자에게 적합합니다.

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

에서 사용할 수 있는 ToTitleCase 기능을 사용하는 것이 가장 직접적인 방법입니다.대부분의 경우 이름을 관리해야 하는 NET.edg가 지적했듯이, 효과가 없을 몇몇 이름들이 있지만, 이것들은 상당히 드물기 때문에, 그런 이름들이 일반적인 문화를 목표로 하지 않는 한, 당신이 너무 걱정할 필요가 없는 것은 아닙니다.

그러나 사용자가 a로 작업하지 않는 경우.NET langauge는 입력의 모양에 따라 다릅니다. 이름과 성을 나타내는 두 개의 개별 필드가 있는 경우 첫 글자를 하위 문자열을 사용하여 대문자로 표시하면 됩니다.

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

그러나 동일한 문자열의 일부로 여러 이름을 제공받은 경우 정보를 어떻게 얻고 있는지 알고 그에 따라 정보를 분할해야 합니다.따라서 "John Do"와 같은 이름을 얻게 되면 공백 문자를 기준으로 문자열을 분할합니다."Doe, John"과 같은 형식인 경우 쉼표를 기준으로 분할해야 합니다.하지만, 일단 그것을 쪼개면 이전에 보여준 코드를 적용하기만 하면 됩니다.

컬쳐인포.Current Current Culture.TextInfo.제목 상자로("내 이름");

반환합니다 ~ My Name

그러나 문제는 앞에서 언급했듯이 McFly와 같은 이름으로 여전히 존재합니다.

저는 이 문제를 해결하기 위해 제 나름의 방법을 사용합니다.

예를 들어 다음과 같은 문구가 있습니다."안녕 세상.Hello 이것은 스택 오버플로우 세계입니다."는 "Hello World"가 될 것입니다.Hello This Is The Stackoverflow World.regex \b(단어의 시작) \w(단어의 첫 번째 문자)가 트릭을 수행합니다.

/// <summary>
/// Makes each first letter of a word uppercase. The rest will be lowercase
/// </summary>
/// <param name="Phrase"></param>
/// <returns></returns>
public static string FormatWordsWithFirstCapital(string Phrase)
{
     MatchCollection Matches = Regex.Matches(Phrase, "\\b\\w");
     Phrase = Phrase.ToLower();
     foreach (Match Match in Matches)
         Phrase = Phrase.Remove(Match.Index, 1).Insert(Match.Index, Match.Value.ToUpper());

     return Phrase;
}

ToTitleCase를 사용하는 제안은 모두 대문자인 문자열에는 적용되지 않습니다.그래서 첫 번째 캐릭터는 '어퍼'에, 나머지 캐릭터는 '어퍼'에 각각 전화번호는 '어퍼', 나머지 캐릭터는 '어퍼'를 불러야 합니다.

이 수업이 효과가 있습니다._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();
        }
}

vS2k8을 사용하는 경우 확장 방법을 사용하여 String 클래스에 추가할 수 있습니다.

public static string FirstLetterToUpper(this String input)
{
    return input = input.Substring(0, 1).ToUpper() + 
       input.Substring(1, input.Length - 1);
}

강조된 몇 가지 문제/문제를 해결하려면 먼저 문자열을 소문자로 변환하고 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);
}

나는 이런 방식이 좋습니다.

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

MSDN 기사에서 해제되었습니다.

도움이 되길 바랍니다.

String fName = "firstname";
String lName = "lastname";
String capitalizedFName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(fName);
String capitalizedLName = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(lName);
 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;

        }

edg에서 알 수 있듯이, 특수한 이름을 처리하기 위해서는 더 복잡한 알고리즘이 필요합니다. 이것이 아마도 많은 곳이 모든 것을 대문자로 강요하는 이유일 것입니다.

테스트되지 않은 이 c#와 같은 것은 당신이 요청한 간단한 케이스를 처리해야 합니다.

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

언급URL : https://stackoverflow.com/questions/72831/how-do-i-capitalize-first-letter-of-first-name-and-last-name-in-c

반응형