예제 #1
0
        public int IndexOf(char value,
                           int start,
                           int length)
        {
            if (0 > start)
            {
                throw new ArgumentOutOfRangeException("start", ExceptionMessage.NegativeStartIndex(start));
            }

            if (0 > length)
            {
                throw new ArgumentOutOfRangeException("length", ExceptionMessage.NegativeLength(length));
            }

            if (start > _value.Length)
            {
                throw new ArgumentOutOfRangeException("start", ExceptionMessage.StartIndexAfterValueLength(start, ToString()));
            }

            if (start + length >
                _value.Length)
            {
                throw new ArgumentOutOfRangeException("length", ExceptionMessage.StartIndexAndLengthAfterValueLength(start, length, ToString()));
            }

            if (0 == _value.Length)
            {
                return(-1);
            }

            for (var i = start; i < start + length; i++)
            {
                if (this[i] == value)
                {
                    return(i);
                }
            }

            return(-1);
        }
예제 #2
0
        public char[] ToCharArray(int start,
                                  int length)
        {
            if (0 > start)
            {
                throw new ArgumentOutOfRangeException("start", ExceptionMessage.NegativeStartIndex(start));
            }

            if (0 > length)
            {
                throw new ArgumentOutOfRangeException("length", ExceptionMessage.NegativeLength(length));
            }

            if (start > _value.Length)
            {
                throw new ArgumentOutOfRangeException("start", ExceptionMessage.StartIndexAfterValueLength(start, ToString()));
            }

            if (start + length >
                _value.Length)
            {
                throw new ArgumentOutOfRangeException("length", ExceptionMessage.StartIndexAndLengthAfterValueLength(start, length, ToString()));
            }

            var result = new List <char>();

            if (0 == length)
            {
                return(result.ToArray());
            }

            for (var i = 0; i < length; i++)
            {
                result.Add(_value[start + i]);
            }

            return(result.ToArray());
        }
예제 #3
0
        public int LastIndexOf(string value,
                               int start,
                               int length)
        {
            if (null == value)
            {
                throw new ArgumentNullException("value");
            }

            if (0 > start)
            {
                throw new ArgumentOutOfRangeException("start", ExceptionMessage.NegativeStartIndex(start));
            }

            if (0 > length)
            {
                throw new ArgumentOutOfRangeException("length", ExceptionMessage.NegativeLength(length));
            }

            if (start > _value.Length)
            {
                throw new ArgumentOutOfRangeException("start", ExceptionMessage.StartIndexAfterValueLength(start, ToString()));
            }

            if (start + length >
                _value.Length)
            {
                throw new ArgumentOutOfRangeException("length", ExceptionMessage.StartIndexAndLengthAfterValueLength(start, length, ToString()));
            }

            if (value.Length > length)
            {
                throw new ArgumentOutOfRangeException("length", ExceptionMessage.LengthShorterThanValueLength(length, value));
            }

            if (0 == _value.Length)
            {
                return(-1);
            }

            if (0 == value.Length)
            {
                return(-1);
            }

            if (1 == value.Length)
            {
                return(IndexOf(value[0]));
            }

            var result = -1;
            var max    = _value.Length - value.Length + 1;

            for (var i = start; i < start + max; i++)
            {
                if (_value[i] !=
                    value[0])
                {
                    continue;
                }

                for (var j = 1; j < value.Length; j++)
                {
                    if (_value[i + j] !=
                        value[j])
                    {
                        break;
                    }

                    if (j != value.Length - 1)
                    {
                        continue;
                    }

                    result = i;
                    break;
                }
            }

            return(result);
        }