2015-01-16 3 views
2

Я хочу форматировать мою строку в форматирование символов «Заглавие» (например, «Заглавие первого символа слов»).Заглавие первого символа слов в строке

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

* мой струна есть максимальный 3 слова.

После того, googled, я нашел несколько способов достижения этого подхода, но я не могу получить, какой из них лучше всего подходит.

Способ первый:

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

Способ второй:

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 Какой код лучше всего использовать (производительность и скорость)?

+0

Ваш второй метод имеет множество распределений, поэтому я предполагаю, что он будет медленнее. Профилировщик может дать вам данные, чтобы рассказать. –

+0

Старайтесь избегать руководства. Используйте метод-1. Он также читабельнее и короче. – Amit

+1

Единственный способ узнать, что быстрее, это проверить их. Скорее всего, оба достаточно быстры, и в этом случае идут с более простым. – dbc

ответ

5

Вы должны пойти на размер кода, читаемость, понятности, ремонтопригодности, поэтому ясно победитель ...


EDIT

Так что я бы предложить

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

Я бы не использовал его, кроме того, что ОП выдвинул семантически эквивалентный подход. Я просто предлагал «более чистый» подход к его методу. Также могут быть специальные случаи (pardon pun) - как и проблема сокращения - что OP хочет покрыть, а существующий 'ToTitleCase()' может не делать правильную вещь для OP. Почему еще он поднял бы этот вопрос? – Enigmativity

Смежные вопросы