Convert all first letter to upper case, rest lower for each word

前端 未结 11 2069
一向
一向 2020-12-04 10:15

I have a string of text (about 5-6 words mostly) that I need to convert.

Currently the text looks like:

THIS IS MY TEXT RIGHT NOW

I

11条回答
  •  野趣味
    野趣味 (楼主)
    2020-12-04 10:33

    One of the possible solution you might be interested in. Traversing an array of chars from right to left and vise versa in one loop.

    public static string WordsToCapitalLetter(string value)
        {
            if (string.IsNullOrWhiteSpace(value))
            {
                throw new ArgumentException("value");
            }
    
            int inputValueCharLength = value.Length;
            var valueAsCharArray = value.ToCharArray();
    
            int min = 0;
            int max = inputValueCharLength - 1;
    
            while (max > min)
            {
                char left = value[min];
                char previousLeft = (min == 0) ? left : value[min - 1];
    
                char right = value[max];
                char nextRight = (max == inputValueCharLength - 1) ? right : value[max - 1];
    
                if (char.IsLetter(left) && !char.IsUpper(left) && char.IsWhiteSpace(previousLeft))
                {
                    valueAsCharArray[min] = char.ToUpper(left);
                }
    
                if (char.IsLetter(right) && !char.IsUpper(right) && char.IsWhiteSpace(nextRight))
                {
                    valueAsCharArray[max] = char.ToUpper(right);
                }
    
                min++;
                max--;
            }
    
            return new string(valueAsCharArray);
        }
    

提交回复
热议问题