除了第一个字符外,如何将字符串转换为小写? 可以用LINQ完成吗?
由于
答案 0 :(得分:32)
如果字符串中只有一个单词,则可以使用TextInfo.ToTitleCase
。无需使用Linq。
正如@Guffa所说:
这会将任何字符串转换为标题大小写,因此,“hello world”和“HELLO WORLD”都将转换为“Hello World”。
要实现 exectly 您所要求的内容(将所有字符转换为较低的字符,除了第一个字符),您可以执行以下操作:
string mostLower = myString.Substring(0, 1) + myString.Substring(1).ToLower();
答案 1 :(得分:18)
这可以通过简单的字符串操作来完成:
s = s.Substring(0, 1) + s.Substring(1).ToLower();
请注意,这完全符合您的要求,即它将所有字符转换为小写,但第一个字符保持不变。
如果您还想将第一个字符更改为大写字母,则可以执行以下操作:
s = s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower();
请注意,此代码假定字符串中至少有两个字符。如果有可能它更短,你当然应该先测试它。
答案 2 :(得分:16)
String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray());
答案 3 :(得分:7)
使用命名空间:using System.Globalization;
...
string value = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello");
修改强>
此代码仅在其单个单词时起作用。对于将所有字符转换为较低的字母,除了第一个字母,请检查Guffa答案。
string value = myString.Substring(0, 1) + myString.Substring(1).ToLower();
答案 4 :(得分:3)
不确定你能在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;
}
答案 5 :(得分:3)
基于上面的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
欢呼guffa
答案 6 :(得分:2)
var initialString = "Hello hOW r u?";
var res = string.Concat(initialString..ToUpper().Substring(0, 1), initialString.ToLower().Substring(1));
答案 7 :(得分:0)
您可以使用扩展方法:
static class StringExtensions
{
public static string ToLowerFirst(this string text)
=> !string.IsNullOrEmpty(text)
? $"{text.Substring(0, 1).ToLower()}{text.Substring(1)}"
: text;
}
单元测试(使用FluentAssertions和Microsoft UnitTesting):
[TestClass]
public class StringExtensionsTests
{
[TestMethod]
public void ToLowerFirst_ShouldReturnCorrectValue()
=> "ABCD"
.ToLowerFirst()
.Should()
.Be("aBCD");
[TestMethod]
public void ToLowerFirst_WhenStringIsEmpty_ShouldReturnCorrectValue()
=> string.Empty
.ToLowerFirst()
.Should()
.Be(string.Empty);
}