Система.Ошибка ArgumentOutOfRangeException

using System;
using System.Text.RegularExpressions;
using System.Globalization;

public class Kata
{
   public static string ToCamelCase(string str)
   {
        TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
        string clearStr = Regex.Replace(myTI.ToTitleCase(str), @"_|-", "");
        return clearStr = str.Substring(0, 3) + clearStr.Remove(0, 3);     
   }
}

input — > ToCamelCase («the_stealth_warrior»)

вход — > ToCamelCase («The-Stealth-Warrior»)

Ошибка: System.ArgumentOutOfRangeException: индекс и длина должны
см. расположение в строке. Имя параметра: length

Что я делаю не так?

Метки

3 ответа

  1. Проверка strи clearStrдлина. Substringвыдаст эту ошибку, если длина строк меньше, чем то, что вы выбираете/удаляете.

  2. У вас есть исключениеSubstring(0, 3), вызванное или Remove(0, 3)в случае или strили clearStrкороче, чем 3. Предлагаю добавить валидацию:

    public static string ToCamelCase(string str) {
      // if str is null or too short 
      if (string.IsNullOrEmpty(str))
        return str;
      else if (str.Length < 3)
        return str;
    
      TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
      string clearStr = Regex.Replace(myTI.ToTitleCase(str), @"_|-", "");
    
      // if clearStr is too short
      if (clearStr.Length < 3)
        return str;
    
      return clearStr = str.Substring(0, 3) + clearStr.Remove(0, 3);
    }
    
  3. Код выдаст это исключение, если передать строку в качестве strпараметра, который короче 3 символов. Я предлагаю добавить проверку для этого в начале и определить, какой желаемый результат для такого рода значений.