Как строчить строку, за исключением первого символа с С#

Как преобразовать строку в нижний регистр, за исключением первого символа? Может ли это быть выполнено с помощью LINQ?

Спасибо

Ответы

Ответ 1

String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray());

Ответ 2

Если у вас есть только одно слово в строке, вы можете использовать TextInfo.ToTitleCase. Нет необходимости использовать Linq.

Как @Guffa отметил:

Это преобразует любую строку в заголовок, так что "hello world" и "HELLO WORLD" будут преобразованы в "Hello World".


Чтобы добиться того, что вы попросили (преобразовать все символы ниже, кроме первого), вы можете сделать следующее:

string mostLower = myString.Substring(0, 1) + myString.Substring(1).ToLower();

Ответ 3

Это можно сделать с помощью простых операций с строкой:

s = s.Substring(0, 1) + s.Substring(1).ToLower();

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

Если вместо этого вы хотите изменить первый символ на верхний регистр, вы должны сделать следующее:

s = s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();

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

Ответ 4

Использовать пространство имен: using System.Globalization;

...

string value = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello");

ИЗМЕНИТЬ

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

string value = myString.Substring(0, 1) + myString.Substring(1).ToLower();

Ответ 5

Не уверен, что вы можете сделать это в linq, это не linq-подход:

    public static string FirstCap(string value)
    {
        string result = String.Empty;

        if(!String.IsNullOrEmpty(value))
        {
            if(value.Length == 1)
            {
                result = value.ToUpper();
            }
            else
            {
                result = value.Substring(0,1).ToString().ToUpper() + value.Substring(1).ToLower();
            }
        }

        return result;
    }

Ответ 6

в соответствии с приведенным выше примером guffa (с небольшими изменениями). вы можете преобразовать это в метод расширения (прошу простить плохо названный метод:)):

public static string UpperFirst(this string source)
{
    return source.ToLower().Remove(0, 1)
            .Insert(0, source.Substring(0, 1).ToUpper());
}

использование:

var myNewString = myOldString.UpperFirst();
// or simply referenced as myOldString.UpperFirst() where required

cheers guffa

Ответ 7

var initialString = "Hello hOW r u?";          

var res = string.Concat(initialString..ToUpper().Substring(0, 1), initialString.ToLower().Substring(1));