Ответ 1
String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray());
Как преобразовать строку в нижний регистр, за исключением первого символа? Может ли это быть выполнено с помощью LINQ?
Спасибо
String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray());
Если у вас есть только одно слово в строке, вы можете использовать TextInfo.ToTitleCase
. Нет необходимости использовать Linq.
Как @Guffa отметил:
Это преобразует любую строку в заголовок, так что "hello world" и "HELLO WORLD" будут преобразованы в "Hello World".
Чтобы добиться того, что вы попросили (преобразовать все символы ниже, кроме первого), вы можете сделать следующее:
string mostLower = myString.Substring(0, 1) + myString.Substring(1).ToLower();
Это можно сделать с помощью простых операций с строкой:
s = s.Substring(0, 1) + s.Substring(1).ToLower();
Обратите внимание, что это делает именно то, что вы просили, т.е. преобразует все символы в нижний регистр, кроме первого, который остается неизменным.
Если вместо этого вы хотите изменить первый символ на верхний регистр, вы должны сделать следующее:
s = s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();
Обратите внимание, что этот код предполагает, что в строках имеется по крайней мере два символа. Если есть вероятность, что он короче, вы должны, конечно, сначала проверить это.
Использовать пространство имен: using System.Globalization;
...
string value = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello");
ИЗМЕНИТЬ
Этот код работает только в том случае, если его одно слово. Для преобразования всех символов в нижний, кроме первой буквы, проверьте ответ Гуффа.
string value = myString.Substring(0, 1) + myString.Substring(1).ToLower();
Не уверен, что вы можете сделать это в 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;
}
в соответствии с приведенным выше примером 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
var initialString = "Hello hOW r u?";
var res = string.Concat(initialString..ToUpper().Substring(0, 1), initialString.ToLower().Substring(1));