c# 中的打破驼峰式大小写函数
Break Camel Case function in c#
我试图在代码战中解决这个问题,但我不知道它有什么问题。错误说:
System.ArgumentOutOfRangeException : Length cannot be less than zero.
Parameter name: Length
我会很感激任何帮助
public static string BreakCamelCase(string str)
{
if (str.Length < 1)
return "";
var res = "";
foreach (var c in str)
{
if (char.IsUpper(c))
res = str.Substring(0,str.IndexOf(c)) + " " + str.Substring(str.IndexOf(c));
str = res;
}
return res;
}
现在是 crystal 球 (逆向工程)的好时机...看来,您想 添加 space (' '
) 之前 每个大写字符:
"MyOwnString" -> " My Own String"
"something" -> "something"
"camelCase" -> "camel Case"
"наРусском" -> "на Русском" // all languages (e.g. Russian), not only English
如果这是你的初始任务,你可以这样实现
public static string BreakCamelCase(string str) {
// "str.Length<1" will fail in case str == null. Do not re-invent the wheel
if (string.IsNullOrEmpty(str))
return str;
// A simple Linq query:
return string.Concat(str // concat all chunks
.Select(c => char.IsUpper(c) // which can be
? " " + c.ToString() // uppercase
: c.ToString())); // others
}
如果你更喜欢旧的 loop 解决方案:
public static string BreakCamelCase(string str) {
if (string.IsNullOrEmpty(str))
return str;
// We want to build string in a loop.
// StringBuilder has been specially desinged for this
StringBuilder sb = new StringBuilder();
foreach (var c in str) {
if (char.IsUpper(c))
sb.Append(' ');
sb.Append(c);
}
return sb.ToString();
}
最后可以试试正则表达式:
public static string BreakCamelCase(string str) {
if (string.IsNullOrEmpty(str))
return str;
return Regex.Replace(str, @"(\p{Lu})", " ");
}
我试图在代码战中解决这个问题,但我不知道它有什么问题。错误说:
System.ArgumentOutOfRangeException : Length cannot be less than zero.
Parameter name: Length
我会很感激任何帮助
public static string BreakCamelCase(string str)
{
if (str.Length < 1)
return "";
var res = "";
foreach (var c in str)
{
if (char.IsUpper(c))
res = str.Substring(0,str.IndexOf(c)) + " " + str.Substring(str.IndexOf(c));
str = res;
}
return res;
}
现在是 crystal 球 (逆向工程)的好时机...看来,您想 添加 space (' '
) 之前 每个大写字符:
"MyOwnString" -> " My Own String"
"something" -> "something"
"camelCase" -> "camel Case"
"наРусском" -> "на Русском" // all languages (e.g. Russian), not only English
如果这是你的初始任务,你可以这样实现
public static string BreakCamelCase(string str) {
// "str.Length<1" will fail in case str == null. Do not re-invent the wheel
if (string.IsNullOrEmpty(str))
return str;
// A simple Linq query:
return string.Concat(str // concat all chunks
.Select(c => char.IsUpper(c) // which can be
? " " + c.ToString() // uppercase
: c.ToString())); // others
}
如果你更喜欢旧的 loop 解决方案:
public static string BreakCamelCase(string str) {
if (string.IsNullOrEmpty(str))
return str;
// We want to build string in a loop.
// StringBuilder has been specially desinged for this
StringBuilder sb = new StringBuilder();
foreach (var c in str) {
if (char.IsUpper(c))
sb.Append(' ');
sb.Append(c);
}
return sb.ToString();
}
最后可以试试正则表达式:
public static string BreakCamelCase(string str) {
if (string.IsNullOrEmpty(str))
return str;
return Regex.Replace(str, @"(\p{Lu})", " ");
}