Подтвердить что ты не робот

Преобразование строки в camelCase из TitleCase С#

У меня есть строка, которую я преобразовал в 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();
    }
}

Производит желаемый выход

4b9b3361

Ответ 1

Вам просто нужно опустить первый символ в массиве. См. Этот ответ

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

Как побочная заметка, когда вы удаляете пробелы, вы можете заменить подчеркивание пустой строкой.

.Replace("_", string.Empty)

Ответ 2

Реализован ответ Бронумского в методе расширения (без замены символов подчеркивания).

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

Ответ 3

Вот мой код, если он кому-то полезен

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

Последняя строка изменяет первый символ на верхний регистр, но вы можете изменить на нижний регистр или все, что вам нравится.

Ответ 4

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

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

Адаптировано из ответа Леонардо:

static string PascalCase(string str) {
  TextInfo cultInfo = new CultureInfo("en-US", false).TextInfo;
  str = Regex.Replace(str, "([A-Z]+)", " $1");
  str = cultInfo.ToTitleCase(str);
  str = str.Replace(" ", "");
  return str;
}

Преобразует в PascalCase, сначала добавляя пробел перед любой группой прописных букв, а затем преобразуя в регистр заголовков перед удалением всех пробелов.