2015-01-16 4 views
2

문자열을 대문자로 변환 (예 : 첫 글자를 대문자로 소문자 변환)하고 싶습니다.문자열의 단어 첫 글자를 대문자로 사용하십시오.

For Example - 
       If Input is: "NEW YORK CITY" 
       then the desired output is: "New York City" 

* 내 문자열의 최대 길이는 3 자입니다.

후, 내가이 방법을 달성하기 위해 몇 가지 방법을 찾았지만, 나는 이것을 위해 최선의 접근 방식을 얻을 수 없습니다.

방법 1 :

string City = "NEW YORK CITY"; 
City = City.ToLower(); 
string Capatilize_City = ""; 
Capatilize_City = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(City); 

Demo : Ideone with 1st method

방법 2 :

string City = "NEW YORK CITY"; 
string[] lstWord = City.ToLower().Split(' '); 
string Capatilize_City = ""; 
foreach (string s in lstWord) 
{ 
    string z = s.Substring(0, 1).ToUpper() + s.Substring(1, s.Length - 1); 
    Capatilize_City += " " + z; 
} 
Capatilize_City = Capatilize_City.Trim(); 

Demo: Ideone with 2nd method

W hich 코드가 사용하기에 가장 좋습니다 (성능 및 속도 위반)? 분명한 승자 그래서 당신은 코드 크기, 가독성, 이해도, 유지 보수성 가야

+0

두 번째 방법에는 많은 할당이 있으므로 내 생각에 속도가 느려질 것입니다. 프로파일 러는 알려줄 데이터를 제공합니다. –

+0

매뉴얼을 피하십시오. 방법 -1을 사용하십시오. 또한 읽기 쉽고 짧습니다. – Amit

+1

가장 빠른 방법을 알 수있는 유일한 방법은 테스트하는 것입니다. 기회는 모두 빠르며, 어떤 경우에는 더 간단합니다. – dbc

답변

5

... 내가 제안 것 그래서


편집

Capatilize_City = 
    System.Globalization.CultureInfo.CurrentCulture.TextInfo 
     .ToTitleCase(City.ToLower()); 
+0

위의 경우 첫 번째 방법이 가장 좋습니다. –

+0

그래, 난 내 대답에 기준을 사용하여 생각합니다 ** 매우 ** 명백한 – DrKoch

1

이 하나의 라이너도 작동합니다.

string Capatilize_City = 
    String.Join(
     " ", 
     City 
      .ToLower() 
      .Split(' ') 
      .Select(s => 
       s.Substring(0, 1).ToUpper() 
       + s.Substring(1, s.Length - 1))); 

엄청난 문자열 성능을 통해 이것을 수행하지 않는 한 어떤 방법으로도 문제가 발생하지 않아야합니다.

.ToTitleCase() 문자열에 대한 확장 방법을 제안하고이를 사용하는 것이 좋습니다. 그러면 구현을 변경해야 할 경우 코드의 한 지점에서만이를 수행 할 수 있습니다.

+0

왜 누군가가 기존의 ToTitleCase() 대신 이것을 사용합니까? – webnoob

+0

나는 OP가 의미 론적으로 동등한 접근법을 제시한다는 사실을 제외하면 그것을 사용하지 않을 것이다. 나는 그의 방법에 접근하는 "깨끗한"방법을 제공하고있었습니다. OP가 커버하고 싶고 기존의'ToTitleCase()'가 OP를 위해 옳은 일을하지 못할 수도 있다는 특별 약어 (말장난을 용서하십시오)가있을 수 있습니다. 왜이 질문을 제기하겠습니까? – Enigmativity

관련 문제