如何用C#小写除第一个字符以外的字符串

时间:2010-12-13 09:40:01

标签: c#

除了第一个字符外,如何将字符串转换为小写? 可以用LINQ完成吗?

由于

8 个答案:

答案 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);
}