Единый вход с Linkedin продолжает запрашивать авторизацию для пользователей, вошедших с API v1

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

public static string ToTitleCase(string input, int minLength = 0)
{
    TextInfo ti = CultureInfo.CurrentCulture.TextInfo;
    string titleCaseDefault = ti.ToTitleCase(input);
    if (minLength == 0)
        return titleCaseDefault;
    StringBuilder sb = new StringBuilder(titleCaseDefault.Length);
    int wordCount = 0;
    char[] wordSeparatorChars = " \t\n.,;-:".ToCharArray();

    for (int i = 0; i < titleCaseDefault.Length; i++)
    {
        char c = titleCaseDefault[i];
        bool nonSpace = !char.IsWhiteSpace(c);
        if (nonSpace)
        {
            wordCount++;
            int firstSpace = titleCaseDefault.IndexOfAny(wordSeparatorChars, i);
            int endIndex = firstSpace >= 0 ? firstSpace : titleCaseDefault.Length;
            string word = titleCaseDefault.Substring(i, endIndex - i);
            if (wordCount == 1) // first word upper
                sb.Append(word);
            else
                sb.Append(word.Length < minLength ? word.ToLower() : ti.ToTitleCase(word));
            i = endIndex - 1;
        }
        else
            sb.Append(c);
    }
    return sb.ToString();
}

Вы пример данных:

string text =  "the car is very fast";
string output = ToTitleCase(text, 3);
0
задан Jonathan Vukovich-Tribouharet 5 March 2019 в 11:05
поделиться