我想采用驼峰式大小写的类名或枚举名,并以普通文本为用户显示。我怎样才能以编程方式做到这一点?
样本输入:
主页背景颜色
预期输出:
主页背景颜色
或者
主页背景颜色
一个正则表达式选项:
public static string ToMeaningfulName(this string value)
{
return Regex.Replace(value, "(?!^)([A-Z])", " $1");
}
输入“MainPageBackgroundColor”
输出-“主页背景颜色”
您可以通过以下方式将string
CamelCase 转换为由空格分隔的可显示字符串:
public static string DisplayCamelCaseString(string camelCase)
{
List<char> chars = new List<char>();
chars.Add(camelCase[0]);
foreach(char c in camelCase.Skip(1))
{
if (char.IsUpper(c))
{
chars.Add(' ');
chars.Add(char.ToLower(c));
}
else
chars.Add(c);
}
return new string(chars.ToArray());
}
这将从“CamelCase”转换为“Camel case”或“SomeRandomEnumeration”转换为“Some random enumeration”。
只是为了解决问题,使用带有扩展方法的 Linq 的替代解决方案。
public static string ToSentenceCase(this string value)
{
string[] spacedWords
= ((IEnumerable<char>)value).Skip(1)
.Select(c => c == char.ToUpper(c)
? " " + char.ToLower(c).ToString()
: c.ToString()).ToArray();
string result = value.Substring(0, 1)
+ (String.Join("", spacedWords)).Trim();
return result;
}
返回:“主页背景颜色”
public static string ToTitleCase(this string value)
{
string[] spacedWords
= ((IEnumerable<char>)value)
.Select(c => c == char.ToUpper(c)
? " " + c.ToString()
: c.ToString()).ToArray();
return (String.Join("", spacedWords)).Trim();
}
返回:“主页背景颜色”
string a = "asdfaGasfdasdAA";
a = a.Substring(0,1).ToUpper() + a.Substring(1,a.Length-1).ToLower();
我把琼斯的评论当作挑战......
这是我第一次这样做的方式。它速度快并且按预期工作,但是在看到其他答案后,我将其更改为我标记为答案的答案。
public static string CamelCaseToDisplayName<T>(this T enumeration)
{
string name = enumeration.ToString();
for (int i = 1; i < name.Length; i++)
{
char c = name[i];
if (c >= 'A' && c <= 'Z')
{
name = name.Remove(i, 1);
name = name.Insert(i++, ((char)(c + 0x30)).ToString());
name = name.Insert(i, " ");
}
}
return name;
}
StringBuilder 类的示例并表示为扩展方法。
public static string ToCapitalWithSpaces(this string status)
{
var response = new StringBuilder(status[..1]);
foreach (var chr in status.Skip(1))
{
if (char.IsUpper(chr))
response.Append(" ");
response.Append(chr);
}
return response.ToString();
}