문자열의 첫 글자를 대문자로 바꾸고 나머지를 낮추는 쉬운 방법이 있습니까? 내장 된 방법이 있습니까, 아니면 직접 만들어야합니까?
답변
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
정규식이 필요한 경우 우리가 처리 할 경우, 예를 들어, 조정할 수 있습니다 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)
.
마지막으로, 우리는이 정규 표현식 이 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 ()가 도움이 될 것입니다.
답변
가장 직접적인 옵션은 .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”과 같은 형식 인 경우 쉼표를 기준으로 분할해야합니다. 그러나 일단 분할하면 이전에 표시된 코드 만 적용하면됩니다.