Функция Break Camel Case в C#
Я пытаюсь решить эту проблему в codewars, но я не знал, что в этом плохого. Ошибка сказала:
System.ArgumentOutOfRangeException: длина не может быть меньше нуля.
Имя параметра: длина
Я буду признателен за любую помощь
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;
}
1 ответ
Самое время для хрустального шара (реверс-инжиниринг)... Кажется, вы хотите добавить пространство (' '
) перед каждым заглавным символом:
"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
}
Если вы предпочитаете старое доброе решение:
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})", " $1");
}