대문자와 소문자를 혼합하여 단어를 포함하는 문자열이 있습니다.
예를 들면 다음과 같습니다. string myData = "a Simple string";
각 단어의 첫 문자 (공백으로 구분)를 대문자로 변환해야합니다. 그래서 결과를 다음과 같이 원합니다.string myData ="A Simple String";
이 작업을 수행하는 쉬운 방법이 있습니까? 나는 문자열을 나누고 변환을하고 싶지 않습니다 (마지막 수단이 될 것입니다). 또한 문자열이 영어로 보장됩니다.
답변
MSDN : TextInfo.ToTitleCase
다음을 포함해야합니다. using System.Globalization
string title = "war and peace";
TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //War And Peace
//When text is ALL UPPERCASE...
title = "WAR AND PEACE" ;
title = textInfo.ToTitleCase(title);
Console.WriteLine(title) ; //WAR AND PEACE
//You need to call ToLower to make it work
title = textInfo.ToTitleCase(title.ToLower());
Console.WriteLine(title) ; //War And Peace
답변
이 시도:
string myText = "a Simple string";
string asTitleCase =
System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.
ToTitleCase(myText.ToLower());
이미 지적했듯이 TextInfo.ToTitleCase를 사용하면 원하는 정확한 결과를 얻지 못할 수 있습니다. 출력에 대한 제어가 더 필요한 경우 다음과 같이 할 수 있습니다.
IEnumerable<char> CharsToTitleCase(string s)
{
bool newWord = true;
foreach(char c in s)
{
if(newWord) { yield return Char.ToUpper(c); newWord = false; }
else yield return Char.ToLower(c);
if(c==' ') newWord = true;
}
}
그런 다음 다음과 같이 사용하십시오.
var asTitleCase = new string( CharsToTitleCase(myText).ToArray() );
답변
또 다른 변형. 여기 몇 가지 팁을 바탕 으로이 확장 방법으로 축소하여 내 목적에 효과적입니다.
public static string ToTitleCase(this string s) =>
CultureInfo.InvariantCulture.TextInfo.ToTitleCase(s.ToLower());
답변
개인적으로 나는 TextInfo.ToTitleCase
방법을 모든 문자가 대문자 일 때 왜 작동하지 않는지 이해하지 못합니다.
Winston Smith가 제공하는 util 기능을 좋아하지만 현재 사용중인 기능을 제공하겠습니다.
public static String TitleCaseString(String s)
{
if (s == null) return s;
String[] words = s.Split(' ');
for (int i = 0; i < words.Length; i++)
{
if (words[i].Length == 0) continue;
Char firstChar = Char.ToUpper(words[i][0]);
String rest = "";
if (words[i].Length > 1)
{
rest = words[i].Substring(1).ToLower();
}
words[i] = firstChar + rest;
}
return String.Join(" ", words);
}
테스트 문자열을 가지고 노는 것 :
String ts1 = "Converting string to title case in C#";
String ts2 = "C";
String ts3 = "";
String ts4 = " ";
String ts5 = null;
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts1)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts2)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts3)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts4)));
Console.Out.WriteLine(String.Format("|{0}|", TitleCaseString(ts5)));
주기 출력 :
|Converting String To Title Case In C#|
|C|
||
| |
||
답변
최근에 더 나은 해결책을 찾았습니다.
텍스트에 모든 문자가 대문자로 포함되어 있으면 TextInfo 가 올바른 문자로 변환하지 않습니다. 다음과 같이 소문자 함수를 사용하여 문제를 해결할 수 있습니다.
public static string ConvertTo_ProperCase(string text)
{
TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
return myTI.ToTitleCase(text.ToLower());
}
이제 이것은 모든 것을 Propercase로 변환합니다.
답변
public static string PropCase(string strText)
{
return new CultureInfo("en").TextInfo.ToTitleCase(strText.ToLower());
}
답변
누군가 Compact Framework 솔루션에 관심이있는 경우 :
return String.Join(" ", thestring.Split(' ').Select(i => i.Substring(0, 1).ToUpper() + i.Substring(1).ToLower()).ToArray());