2014-04-14 118 views

回答

12

必須有這樣做的多種方式,您可以在第一個字符使用char.ToLower,然後得到的子指數從1開始,您可以嘗試:

string str = "Aaaaaa"; 
str = char.ToLower(str[0]) + str.Substring(1); 

是,如果你檢查字符串更好長度,以避免異常。

if(str.Length > 0) 
{ 
    str = char.ToLower(str[0]) + str.Substring(1); 
} 
+1

+1。 – Christos

3
string s = "HELLO"; 
s = (s.Length > 0) ? s.Substring(0, 1).ToLower() + s.Substring(1) : ""; 

你需要確保你的字符串是不是空的,以避免錯誤

2

你可以試試這個:

// the string you have 
string input = "Asdasds"; 
// the string you want. 
string result = input[0].ToLower()+input.Substring(1); 

input[0]回報您的字符串的第一個字符。在此char上調用ToLower(),您將獲得此角色的較低版本。

2

這是一個笑話(但仍然有效),與OP所付出的努力相對應。

您可以使用具有string.Transform(To.LowerCase)擴展方法大Hummanizer庫:

public abstract class StringProcessor 
{ 
    abstract public string Process(string input); 
} 

public class ChainedStringProcessor : StringProcessor 
{ 
    private readonly IEnumerable<Func<string, string>> filters; 

    public ChainedStringProcessor(params Func<string, string>[] filters) 
    { 
     this.filters = filters; 
    } 

    public override string Process(string input) 
    { 
     if (this.filters == null) 
      throw new InvalidOperationException(); 
     if (input == null) 
      throw new ArgumentNullException("input"); 
     string result = input; 
     foreach (var filter in filters) 
     { 
      result = filter(result); 
     } 
     return result; 
    } 
} 

,然後你可以使用:

ChainedStringProcessor processor = new ChainedStringProcessor(
    str => str.Transform(To.LowerCase) 
); 
string ret = processor.Process("Hello"); 
+0

我很高興你把第一行寫進去。+1讓我發笑。 – Jodrell

3

您可以使用下面的方法的第一個字符轉換成字符串(包括所有必要的檢查):

public static string FirstCharToLower(string str) 
{ 
    if (str == null || str.Length == 0) 
     return str; 

    if (str.Length == 1) 
     return str.ToLower(); 

    return Char.ToLower(str[0]).ToString() + str.Substring(1); 
} 

在某些情況下,當傳遞的字符串爲空時,您可能想要引發異常。如果是這樣的情況下修改方法:

public static string FirstCharToLower(string str) 
{ 
    if (str == null) 
     throw new ArgumentNullException("str"); 

    if (str.Length == 0) 
     return str; 
    else if (str.Length == 1) 
     return str.ToLower(); 

    return Char.ToLower(str[0]).ToString() + str.Substring(1); 
} 

請注意,投擲和捕獲異常會損害性能,因此如果在循環使用的,我建議你使用的第一個實施和檢查空。

+0

如果參數爲空而不是返回,則拋出異常會更合適 –

+0

@Selman22,取決於您想要使用該方法的上下文。我已經編輯了答案以包含您的提案。 –

+0

@ Selman22,爲什麼會更合適? – Jodrell

1

還有另一種變化方式。請注意,如果參數是nullstring.Empty,這與其他許多答案不同。

public static string FirstCharToLower(string value) 
{ 
    if (value == null) 
    { 
     // Take your pick. 
     return null; 
     // or, 
     throw new ArgumentNullException("value"); 
    } 

    return new string(
     value.Take(1).Select(char.ToLower) 
      .Concat(value.Skip(1)).ToArray()); 
} 

另外,有些矯枉過正

public IEnumerable<T> TransformWhere(
    this IEnumerable<T> source, 
    Func<int, T, bool> predicate, 
    Func<T, T> transform) 
{ 
    var i = -1; 
    foreach(var t in source) 
    { 
     if (predicate(++i, t)) 
     { 
      yield return transform(t); 
      continue; 
     } 

     yield return t; 
    } 
} 

,所以你可以做,

var result = new string("SomeString".TransformWhere(
    (i, c) => i == 0, 
    char.ToLower) 
    .ToArray()); 
相關問題