[英]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.