簡體   English   中英

如何用C#小寫除第一個字符以外的字符串

[英]How to lowercase a string except for first character with C#

除第一個字符外,如何將字符串轉換為小寫? 這可以用LINQ完成嗎?

謝謝

如果字符串中只有一個單詞,則可以使用TextInfo.ToTitleCase 無需使用Linq。

正如@Guffa所說:

這會將任何字符串轉換為標題大小寫,因此,“hello world”和“HELLO WORLD”都將轉換為“Hello World”。


為了實現exectly你問(轉換所有字符時,除了第一個),你可以做到以下幾點:

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();

請注意,此代碼假定字符串中至少有兩個字符。 如果有可能它更短,你當然應該首先測試它。

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

使用命名空間: using System.Globalization;

...

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

編輯

此代碼僅在其單個單詞時起作用。對於將所有字符轉換為較低的除了第一個字母檢查Guffa Answer。

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

歡呼guffa

var initialString = "Hello hOW r u?";          

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

您可以使用擴展方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM