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);

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

따라서 아래 코드를 더 낮게 변환하여 함수를 적용하십시오.

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

정규식 도 사용할 수 있습니다 \b[a-zA-Z]단어 경계 후 단어의 시작 문자를 식별하기 위해 \b우리는 그것의 대문자 등가 힘 입어 경기를 교체 할 단지 필요가 Regex.Replace(string input,string pattern,MatchEvaluator evaluator)방법 :

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

정규식이 필요한 경우 우리가 처리 할 경우, 예를 들어, 조정할 수 있습니다 MacDonaldMcFry정규식이 될 경우를 :(?<=\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) .

마지막으로, 우리는이 정규 표현식MacDonald'S마지막 경우와 일치 한다는 것을 알 수 '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


답변

가장 직접적인 옵션은 .NET에서 사용 가능한 ToTitleCase 함수 를 사용 하는 것입니다. 대부분의 경우 이름을 처리해야합니다. 로 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”과 같은 형식 인 경우 쉼표를 기준으로 분할해야합니다. 그러나 일단 분할하면 이전에 표시된 코드 만 적용하면됩니다.