【问题标题】:Break Camel Case function in c# [duplicate]在c#中打破骆驼案例函数[重复]
【发布时间】:2018-08-12 18:24:52
【问题描述】:

我试图在代码战中解决这个问题,但我不知道它有什么问题。错误说:

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

【问题讨论】:

  • if 条件下块周围缺少大括号。没有大括号,第二条语句总是被执行
  • 你不应该在 foreach 中修改str
  • 如果您在调试器中单步执行代码,您将看到 str = res 始终执行,因为您忘记在 if 之后使用 { }。学习使用调试器将帮助您找出逻辑错误,编译器只会发现语法错误。同样如前所述,如果您修改使用 foreach 循环的字符串(和其他集合),则很危险且容易搞砸,构建副本有时更安全。

标签: c# camelcasing


【解决方案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 
}

如果您更喜欢旧的 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})", " $1");
}

【讨论】:

    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多