Convert String To camelCase from TitleCase C#

后端 未结 11 1494

I have a string that I converted to a TextInfo.ToTitleCase and removed the underscores and joined the string together. Now I need to change the first and only the first charact

相关标签:
11条回答
  • 2021-02-04 23:31
    public static string CamelCase(this string str)  
        {  
          TextInfo cultInfo = new CultureInfo("en-US", false).TextInfo;
          str = cultInfo.ToTitleCase(str);
          str = str.Replace(" ", "");
          return str;
        }
    

    This should work using System.Globalization

    0 讨论(0)
  • 2021-02-04 23:34
    var camelCaseFormatter = new JsonSerializerSettings();
    camelCaseFormatter.ContractResolver = new CamelCasePropertyNamesContractResolver();
    
    JsonConvert.SerializeObject(object, camelCaseFormatter));
    
    0 讨论(0)
  • 2021-02-04 23:37

    Strings are immutable, but we can use unsafe code to make it mutable though. The string.Copy insured that the original string stays as is.

    In order for these codes to run you have to allow unsafe code in your project.

            public static unsafe string ToCamelCase(this string value)
            {
                if (value == null || value.Length == 0)
                {
                    return value;
                }
    
                string result = string.Copy(value);
    
                fixed (char* chr = result)
                {
                    char valueChar = *chr;
                    *chr = char.ToLowerInvariant(valueChar);
                }
    
                return result;
            }
    

    This version modifies the original string, instead of returning a modified copy. This will be annoying though and totally uncommon. So make sure the XML comments are warning users about that.

            public static unsafe void ToCamelCase(this string value)
            {
                if (value == null || value.Length == 0)
                {
                    return value;
                }
    
                fixed (char* chr = value)
                {
                    char valueChar = *chr;
                    *chr = char.ToLowerInvariant(valueChar);
                }
    
                return value;
            }
    

    Why use unsafe code though? Short answer... It's super fast.

    0 讨论(0)
  • 2021-02-04 23:40

    Implemented Bronumski's answer in an extension method (without replacing underscores).

     public static class StringExtension
     {
         public static string ToCamelCase(this string str)
         {                    
             if(!string.IsNullOrEmpty(str) && str.Length > 1)
             {
                 return char.ToLowerInvariant(str[0]) + str.Substring(1);
             }
             return str;
         }
     }
    
     //Or
    
     public static class StringExtension
     {
         public static string ToCamelCase(this string str) =>
             return string.IsNullOrEmpty(str) || str.Length < 2
             ? str
             : char.ToLowerInvariant(str[0]) + str.Substring(1);
     }
    

    and to use it:

    string input = "ZebulansNightmare";
    string output = input.ToCamelCase();
    
    0 讨论(0)
  • 2021-02-04 23:40

    Here's my code, includes lowering all upper prefixes:

    public static class StringExtensions
    {
        public static string ToCamelCase(this string str)
        {
            bool hasValue = !string.IsNullOrEmpty(str);
    
            // doesn't have a value or already a camelCased word
            if (!hasValue || (hasValue && Char.IsLower(str[0])))
            {
                return str;
            }
    
            string finalStr = "";
    
            int len = str.Length;
            int idx = 0;
    
            char nextChar = str[idx];
    
            while (Char.IsUpper(nextChar))
            {
                finalStr += char.ToLowerInvariant(nextChar);
    
                if (len - 1 == idx)
                {
                    // end of string
                    break;
                }
    
                nextChar = str[++idx];
            }
    
            // if not end of string 
            if (idx != len - 1)
            {
                finalStr += str.Substring(idx);
            }
    
            return finalStr;
        }
    }
    

    Use it like this:

    string camelCasedDob = "DOB".ToCamelCase();
    
    0 讨论(0)
  • 2021-02-04 23:41

    The following code works with acronyms as well. If it is the first word it converts the acronym to lower case (e.g., VATReturn to vatReturn), and otherwise leaves it as it is (e.g., ExcludedVAT to excludedVAT).

    name = Regex.Replace(name, @"([A-Z])([A-Z]+|[a-z0-9_]+)($|[A-Z]\w*)",
                m =>
                {
                    return m.Groups[1].Value.ToLower() + m.Groups[2].Value.ToLower() + m.Groups[3].Value;
                });
    
    0 讨论(0)
提交回复
热议问题