Advertisement
Guest User

Substring

a guest
Nov 24th, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.00 KB | None | 0 0
  1. /// <summary>
  2.         /// Извлекает подстроку из строки. Подстрока начинается с конца позиции подстроки <paramref name="left"/> и до конца строки. Поиск начинается с заданной позиции.
  3.         /// </summary>
  4.         /// <param name="str">Строка, в которой будет поиск подстроки.</param>
  5.         /// <param name="left">Строка, которая находится слева от искомой подстроки.</param>
  6.         /// <param name="startIndex">Позиция, с которой начинается поиск подстроки. Отсчёт от 0.</param>
  7.         /// <param name="comparsion">Одно из значений перечисления, определяющее правила поиска.</param>
  8.         /// <returns>Найденая подстрока, иначе пустая строка.</returns>
  9.         /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="left"/> равно <see langword="null"/>.</exception>
  10.         /// <exception cref="System.ArgumentException">Значение параметра <paramref name="left"/> является пустой строкой.</exception>
  11.         /// <exception cref="System.ArgumentOutOfRangeException">
  12.         /// Значение параметра <paramref name="startIndex"/> меньше 0.
  13.         /// -или-
  14.         /// Значение параметра <paramref name="startIndex"/> равно или больше длины строки <paramref name="str"/>.
  15.         /// </exception>
  16.         public static string Substring(this string str, string left,
  17.                                        int startIndex, StringComparison comparsion = StringComparison.Ordinal)
  18.         {
  19.             if (string.IsNullOrEmpty(str)) return string.Empty;
  20.  
  21.             #region Проверка параметров
  22.  
  23.             if (left == null) throw new ArgumentNullException("left");
  24.  
  25.             if (left.Length == 0) throw new ArgumentException("left");
  26.  
  27.             if (startIndex < 0) throw new ArgumentException("startIndex");
  28.  
  29.             if (startIndex >= str.Length) throw new ArgumentOutOfRangeException("startIndex");
  30.  
  31.             #endregion
  32.  
  33.             // Ищем начало позиции левой подстроки.
  34.             int leftPosBegin = str.IndexOf(left, startIndex, comparsion);
  35.  
  36.             if (leftPosBegin == -1) return string.Empty;
  37.  
  38.             // Вычисляем конец позиции левой подстроки.
  39.             int leftPosEnd = leftPosBegin + left.Length;
  40.  
  41.             // Вычисляем длину найденной подстроки.
  42.             int length = str.Length - leftPosEnd;
  43.  
  44.             return str.Substring(leftPosEnd, length);
  45.         }
  46.  
  47.         /// <summary>
  48.         /// Извлекает подстроку из строки. Подстрока начинается с конца позиции подстроки <paramref name="left"/> и до конца строки.
  49.         /// </summary>
  50.         /// <param name="str">Строка, в которой будет поиск подстроки.</param>
  51.         /// <param name="left">Строка, которая находится слева от искомой подстроки.</param>
  52.         /// <param name="comparsion">Одно из значений перечисления, определяющее правила поиска.</param>
  53.         /// <returns>Найденая подстрока, иначе пустая строка.</returns>
  54.         /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="left"/> равно <see langword="null"/>.</exception>
  55.         /// <exception cref="System.ArgumentException">Значение параметра <paramref name="left"/> является пустой строкой.</exception>
  56.         public static string Substring(this string str, string left, StringComparison comparsion = StringComparison.Ordinal)
  57.         {
  58.             return Substring(str, left, 0, comparsion);
  59.         }
  60.  
  61.         /// <summary>
  62.         /// Извлекает подстроку из строки. Подстрока ищется между двумя заданными строками, начиная с заданной позиции.
  63.         /// </summary>
  64.         /// <param name="str">Строка, в которой будет поиск подстроки.</param>
  65.         /// <param name="left">Строка, которая находится слева от искомой подстроки.</param>
  66.         /// <param name="right">Строка, которая находится справа от искомой подстроки.</param>
  67.         /// <param name="startIndex">Позиция, с которой начинается поиск подстроки. Отсчёт от 0.</param>
  68.         /// <param name="comparsion">Одно из значений перечисления, определяющее правила поиска.</param>
  69.         /// <returns>Найденая подстрока, иначе пустая строка.</returns>
  70.         /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="left"/> или <paramref name="right"/> равно <see langword="null"/>.</exception>
  71.         /// <exception cref="System.ArgumentException">Значение параметра <paramref name="left"/> или <paramref name="right"/> является пустой строкой.</exception>
  72.         /// <exception cref="System.ArgumentOutOfRangeException">
  73.         /// Значение параметра <paramref name="startIndex"/> меньше 0.
  74.         /// -или-
  75.         /// Значение параметра <paramref name="startIndex"/> равно или больше длины строки <paramref name="str"/>.
  76.         /// </exception>
  77.         public static string Substring(this string str, string left, string right, int startIndex, StringComparison comparsion = StringComparison.Ordinal)
  78.         {
  79.             if (string.IsNullOrEmpty(str)) return string.Empty;
  80.  
  81.             #region Проверка параметров
  82.  
  83.             if (right == null) throw new ArgumentNullException("right");
  84.  
  85.             if (right.Length == 0) throw new ArgumentException("right");
  86.  
  87.             if (startIndex < 0) throw new ArgumentException("startIndex");
  88.  
  89.             if (startIndex >= str.Length) throw new ArgumentOutOfRangeException("startIndex");
  90.  
  91.             #endregion
  92.  
  93.             int leftPosBegin = startIndex;
  94.             // Ищем начало позиции левой подстроки.
  95.  
  96.             if (!string.IsNullOrEmpty(left)) { leftPosBegin = str.IndexOf(left, startIndex, comparsion); }
  97.             else
  98.             { left = string.Empty; }
  99.  
  100.             if (leftPosBegin == -1) return string.Empty;
  101.  
  102.             // Вычисляем конец позиции левой подстроки.
  103.             int leftPosEnd = leftPosBegin + left.Length;
  104.  
  105.             // Ищем начало позиции правой подстроки.
  106.             int rightPos = str.IndexOf(right, leftPosEnd, comparsion);
  107.  
  108.             if (rightPos == -1) return string.Empty;
  109.  
  110.             // Вычисляем длину найденной подстроки.
  111.             int length = rightPos - leftPosEnd;
  112.  
  113.             return str.Substring(leftPosEnd, length);
  114.         }
  115.  
  116.         /// <summary>
  117.         /// Извлекает подстроку из строки. Подстрока ищется между двумя заданными строками.
  118.         /// </summary>
  119.         /// <param name="str">Строка, в которой будет поиск подстроки.</param>
  120.         /// <param name="left">Строка, которая находится слева от искомой подстроки.</param>
  121.         /// <param name="right">Строка, которая находится справа от искомой подстроки.</param>
  122.         /// <param name="comparsion">Одно из значений перечисления, определяющее правила поиска.</param>
  123.         /// <returns>Найденая подстрока, иначе пустая строка.</returns>
  124.         /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="left"/> или <paramref name="right"/> равно <see langword="null"/>.</exception>
  125.         /// <exception cref="System.ArgumentException">Значение параметра <paramref name="left"/> или <paramref name="right"/> является пустой строкой.</exception>
  126.         public static string Substring(this string str, string left, string right, StringComparison comparsion = StringComparison.Ordinal)
  127.         {
  128.             return str.Substring(left, right, 0, comparsion);
  129.         }
  130.  
  131.         /// <summary>
  132.         /// Извлекает подстроку из строки. Подстрока ищется между двумя заданными строками.
  133.         /// </summary>
  134.         /// <param name="str">Строка, в которой будет поиск подстроки.</param>
  135.         /// <param name="left">Строка, которая находится слева от искомой подстроки.</param>
  136.         /// <param name="right">Строка, которая находится справа от искомой подстроки.</param>
  137.         /// <param name="includeBorder">Включиь в результат подстроки слева и справа от искомой.</param>
  138.         /// <param name="comparsion">Одно из значений перечисления, определяющее правила поиска.</param>
  139.         /// <returns>Найденая подстрока, иначе пустая строка.</returns>
  140.         /// <exception cref="System.ArgumentNullException">Значение параметра <paramref name="left"/> или <paramref name="right"/> равно <see langword="null"/>.</exception>
  141.         /// <exception cref="System.ArgumentException">Значение параметра <paramref name="left"/> или <paramref name="right"/> является пустой строкой.</exception>
  142.         public static string Substring(this string str, string left, string right, bool includeBorder, StringComparison comparsion = StringComparison.Ordinal)
  143.         {
  144.             if (string.IsNullOrEmpty(str)) return string.Empty;
  145.  
  146.             #region Проверка параметров
  147.  
  148.             if (left == null) throw new ArgumentNullException(nameof(left));
  149.             if (left.Length == 0) throw new ArgumentException(nameof(left));
  150.             if (right == null) throw new ArgumentNullException(nameof(right));
  151.             if (right.Length == 0) throw new ArgumentException(nameof(right));
  152.  
  153.             #endregion
  154.  
  155.             // Ищем начало позиции левой подстроки.
  156.             int leftPosBegin = str.IndexOf(left, 0, comparsion);
  157.             if (leftPosBegin == -1) return string.Empty;
  158.  
  159.             // Вычисляем конец позиции левой подстроки.
  160.             int leftPosEnd = leftPosBegin + left.Length;
  161.  
  162.             // Ищем начало позиции правой подстроки.
  163.             int rightPos = str.LastIndexOf(right, comparsion);
  164.  
  165.             if (rightPos == -1) return string.Empty;
  166.  
  167.             // Вычисляем длину найденной подстроки.
  168.             if (!includeBorder)
  169.             {
  170.                 int length = rightPos - leftPosEnd;
  171.                 return str.Substring(leftPosEnd, length);
  172.             }
  173.             else
  174.             {
  175.                 int length = rightPos - leftPosEnd + right.Length + left.Length;
  176.                 return str.Substring(leftPosBegin, length);
  177.             }
  178.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement