将字符串转换为来自TitleCase C#的camelCase

时间:2017-02-18 03:26:33

标签: c# camelcasing tolower title-case

我有一个字符串,我转换为TextInfo.ToTitleCase并删除了下划线并将字符串连接在一起。现在我需要将字符串中的第一个字符和第一个字符更改为小写字母,由于某种原因,我无法弄清楚如何完成它。在此先感谢您的帮助。

class Program
{
    static void Main(string[] args)
    {
        string functionName = "zebulans_nightmare";
        TextInfo txtInfo = new CultureInfo("en-us", false).TextInfo;
        functionName = txtInfo.ToTitleCase(functionName).Replace('_', ' ').Replace(" ", String.Empty);
        Console.Out.WriteLine(functionName);
        Console.ReadLine();
    }
}

结果:ZebulansNightmare

期望的结果:zebulansNightmare

更新:

class Program
{
    static void Main(string[] args)
    {
        string functionName = "zebulans_nightmare";
        TextInfo txtInfo = new CultureInfo("en-us", false).TextInfo;
        functionName = txtInfo.ToTitleCase(functionName).Replace("_", string.Empty).Replace(" ", string.Empty);
        functionName = $"{functionName.First().ToString().ToLowerInvariant()}{functionName.Substring(1)}";
        Console.Out.WriteLine(functionName);
        Console.ReadLine();
    }
}

产生所需的输出

13 个答案:

答案 0 :(得分:49)

您只需要降低数组中的第一个字符。见answer

Char.ToLowerInvariant(name[0]) + name.Substring(1)

作为旁注,当您删除空格时,可以用空字符串替换下划线。

.Replace("_", string.Empty)

答案 1 :(得分:13)

在扩展方法中实现了Bronumski的答案(不替换下划线)。

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

并使用它:

string input = "ZebulansNightmare";
string output = input.ToCamelCase();

答案 2 :(得分:10)

如果您使用的是 .NET Core 3 或 .NET 5,您可以调用:

System.Text.Json.JsonNamingPolicy.CamelCase.ConvertName(someString)

那么你肯定会得到与 ASP.NET 自己的 JSON 序列化器相同的结果。

答案 3 :(得分:4)

这是我的代码,以防对任何人有用

    // This converts to camel case
    // Location_ID => LocationId, and testLEFTSide => TestLeftSide

    static string CamelCase(string s)
    {
        var x = s.Replace("_", "");
        if (x.Length == 0) return "Null";
        x = Regex.Replace(x, "([A-Z])([A-Z]+)($|[A-Z])",
            m => m.Groups[1].Value + m.Groups[2].Value.ToLower() + m.Groups[3].Value);
        return char.ToUpper(x[0]) + x.Substring(1);
    }

最后一行将第一个char更改为大写,但您可以更改为小写或任何您喜欢的。

答案 4 :(得分:1)

public static string ToCamelCase(this string text)
{
    return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(te);
}

public static string ToCamelCase(this string text)
{
    return String.Join(" ", text.Split()
    .Select(i => Char.ToUpper(i[0]) + i.Substring(1)));}

public static string ToCamelCase(this string text) {
  char[] a = text.ToLower().ToCharArray();

    for (int i = 0; i < a.Count(); i++ )
    {
        a[i] = i == 0 || a[i-1] == ' ' ? char.ToUpper(a[i]) : a[i];

    }
    return new string(a);}

答案 5 :(得分:1)

public static string CamelCase(this string str)  
    {  
      TextInfo cultInfo = new CultureInfo("en-US", false).TextInfo;
      str = cultInfo.ToTitleCase(str);
      str = str.Replace(" ", "");
      return str;
    }

这应该可以使用System.Globalization

答案 6 :(得分:1)

以下代码也可以使用首字母缩写词。如果它是第一个单词,则将首字母缩写词转换为小写(例如,将void Start() { int argc = 1; char *argv[] = { (char*) "" }; QApplication a(argc, argv); qRegisterMetaType<Mat>("Mat"); qRegisterMetaType<HANDLE>("HANDLE"); MyQTProject::g_MyQTProject = new MyQTProject(); a.exec(); } 转换为VATReturn),否则将其保留原样(例如,将vatReturn转换为ExcludedVAT )。

excludedVAT

答案 7 :(得分:1)

这是我的代码,非常简单。我的主要目的是确保骆驼框与ASP.NET序列化对象的对象兼容,而上述示例并不能保证。

public static class StringExtensions
{
    public static string ToCamelCase(this string name)
    {
        var sb = new StringBuilder();
        var i = 0;
        // While we encounter upper case characters (except for the last), convert to lowercase.
        while (i < name.Length - 1 && char.IsUpper(name[i + 1]))
        {
            sb.Append(char.ToLowerInvariant(name[i]));
            i++;
        }

        // Copy the rest of the characters as is, except if we're still on the first character - which is always lowercase.
        while (i < name.Length)
        {
            sb.Append(i == 0 ? char.ToLowerInvariant(name[i]) : name[i]);
            i++;
        }

        return sb.ToString();
    }
}

答案 8 :(得分:0)

改编自莱昂纳多(Leonardo)的answer

// REMOVES ALL RECORDS WITH A CLASS THAT IS NON-LABEL CLASS                    
var query = from r in d.AsEnumerable()
            where !returnClass().Any(r.Field<string>("Column7").Contains)
            select r;

DataTable output = query.CopyToDataTable<DataRow>();
int dtoutputCount = output.Rows.Count;

ToCSV(output, ftype, "filteredclass");

要转换为PascalCase,请先在任意一组大写字母之前添加一个空格,然后在删除所有空格之前转换为标题大小写。

答案 9 :(得分:0)

这是我的代码,包括降低所有高前缀:

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

像这样使用它:

string camelCasedDob = "DOB".ToCamelCase();

答案 10 :(得分:0)

var camelCaseFormatter = new JsonSerializerSettings();
camelCaseFormatter.ContractResolver = new CamelCasePropertyNamesContractResolver();

JsonConvert.SerializeObject(object, camelCaseFormatter));

答案 11 :(得分:0)

字符串是不可变的,但是我们可以使用不安全的代码使其可变。 字符串。Copy确保原始字符串保持不变。

要运行这些代码,您必须在项目中允许不安全的代码

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

此版本修改原始字符串,而不返回修改后的副本。这将很烦人,而且完全不常见。因此,请确保XML注释警告用户有关这一点。

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

为什么使用不安全的代码?简短的回答...超级快。

答案 12 :(得分:0)

    /// <summary>
    /// Gets the camel case from snake case.
    /// </summary>
    /// <param name="snakeCase">The snake case.</param>
    /// <returns></returns>
    private string GetCamelCaseFromSnakeCase(string snakeCase)
    {
        string camelCase = string.Empty;

        if(!string.IsNullOrEmpty(snakeCase))
        {
            string[] words = snakeCase.Split('_');
            foreach (var word in words)
            {
                camelCase = string.Concat(camelCase, Char.ToUpperInvariant(word[0]) + word.Substring(1));
            }

            // making first character small case
            camelCase = Char.ToLowerInvariant(camelCase[0]) + camelCase.Substring(1);
        }

        return camelCase;
    }