2010-04-09 4 views
2

이 함수는 ProperCase라는 문자열을 사용하고 각 단어의 첫 문자를 대문자로 변환합니다. 따라서 ProperCase ("존 스미스")는 "존 스미스"를 반환합니다. 여기에 코드입니다 :문자열을 적절한 경우에 넣기 위해 LINQ와 lambdas를 사용하십시오.

public string ProperCase(string input) 
    { 
     var retVal = string.Empty; 
     var words = input.Split(' '); 

     foreach (var word in words) 
     { 
      if (word.Length == 1) 
      { 
       retVal += word.ToUpper(); 
      } 
      else if (word.Length > 1) 
      { 
       retVal += word.Substring(0, 1).ToUpper() + word.Substring(1).ToLower(); 
      } 

      retVal += ' '; 
     } 

     if (retVal.Length > 0) 
     { 
      retVal = retVal.Substring(0, retVal.Length - 1); 
     } 

     return retVal; 
    } 

이 코드는 완벽하게 workds,하지만 난 LINQ 및 람다 더 우아하게 그것을 할 수 있습니다 확신 해요. 어떻게 좀 보여 주실 수 있습니까?

답변

6

분할 단어로 입력 문자열, 타이틀의 경우 각 단어를 변환하고, 다시 함께 변환 된 단어 가입 :

TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; 

string result = string.Join(" ", input.Split(' ') 
             .Select(word => textInfo.ToTitleCase(word)) 
             .ToArray()); 
+0

감사 것이 완벽했다! 나는 람다에 ToLower를 추가했다 : word => textInfo.ToTitleCase (word.ToLower()) –

+0

Linq를 사용하는 데 불필요하다. textInfo.ToTitleCase (입력)는 단어 수에 관계없이 동일한 작업을 수행합니다. – SergioL

0

또 다른 해결책은

Regex.Replace(input, @"\b\w", m => m.ToString().ToUpper()); 
관련 문제