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
望ましい結果:ゼブランス
更新:
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();
}
}
目的の出力を生成します
配列の最初の文字を下げるだけです。こちらをご覧ください answer
Char.ToLowerInvariant(name[0]) + name.Substring(1)
サイドノートとして、スペースを削除しているときに、アンダースコアを空の文字列に置き換えることができます。
.Replace("_", string.Empty)
拡張メソッドで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();
誰にも役立つ場合に備えて、ここに私のコードがあります
// 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);
}
最後の行は最初の文字を大文字に変更しますが、小文字に変更することもできます。
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);}
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を使用して動作するはずです
レオナルドの answer から適応
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に変換し、次にすべてのスペースを削除する前にタイトルケースに変換します。