Использовать слова в предложении


public static class StringHelpers
{
    public static string CapitalizeEachWord(this string sentence)
    {
        CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
        TextInfo textInfo = cultureInfo.TextInfo;

        if (String.IsNullOrEmpty(sentence))
        {
            return String.Empty;
        }

        return textInfo.ToTitleCase(sentence);
    }

    public static string CapitalizeFirstWord(this string sentence)
    {
        if (String.IsNullOrEmpty(sentence))
        {
            return String.Empty;
        }

        var words = sentence.Split();
        StringBuilder resultBuilder = new StringBuilder();

        var letters = words[0].ToCharArray();
        List<string> lettersHolder = new List<string>();
        lettersHolder.Add(letters[0].ToString().ToUpper());
        for (int i = 1; i < letters.Length; i++)
        {
            lettersHolder.Add(letters[i].ToString().ToLower());
        }

        foreach (var letter in lettersHolder)
        {
            resultBuilder.Append(letter);                   
        }

        resultBuilder.Append(" ");

        for (int i = 1; i < words.Length; i++)
        {
            resultBuilder.Append(words[i].ToLower());
            resultBuilder.Append(" ");
        }

        return resultBuilder.ToString();
    }
}

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

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

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



665
8
задан 21 февраля 2011 в 04:02 Источник Поделиться
Комментарии
1 ответ

Вы правы, ваш второй способ слишком сложный. Он также не обрабатываем случай, когда строка начинается с пробела (в этом случае слова[0] будет пустой строкой, и письма[0] будет в ауте). Поскольку ваш метод, кажется, делает прописной первую букву строки и нижний регистр и все остальное, почему бы просто не сделать это?

public static string CapitalizeFirstWord(this string sentence)
{
if (String.IsNullOrEmpty(sentence))
{
return String.Empty;
}

String firstLetter = sentence.Substring(0,1);
String rest = sentence.Substring(1);
return firstLetter.ToUpper() + rest.ToLower();
}

10
ответ дан 21 февраля 2011 в 05:02 Источник Поделиться