/// <summary>
        /// Removes empty strings
        /// </summary>
        /// <param name="str"></param>
        /// <param name="options"></param>
        /// <returns></returns>
        public static IEnumerable <string> Split(string str, SplitOptions options = null)
        {
            string[] split = str.Split(' ', '\n', '\t', '\r');

            var withoutEmpty = split.Where(i => !string.IsNullOrEmpty(i));

            return(ProcessOptions(withoutEmpty, options == null ? DefaultOptions : options));
        }
        public void Index(string stringToIndex, T item, int importance = 0, SplitOptions splitOptions = null)
        {
            if (string.IsNullOrWhiteSpace(stringToIndex))
            {
                return;
            }

            foreach (var word in Splitter.Split(stringToIndex, splitOptions))
            {
                put(new IndexedWord <T>(word, importance, item));
            }
        }
        private static IEnumerable <string> ProcessOptions(IEnumerable <string> splitWithoutEmpties, SplitOptions options)
        {
            foreach (var s in splitWithoutEmpties)
            {
                if (s.Equals("&"))
                {
                    yield return("and");

                    continue;
                }

                if (s.Equals(".") || s.Equals(","))
                {
                    continue;
                }

                else
                {
                    yield return(s);
                }

                if (options.SplitUnderscores)
                {
                    string[] subSplit = s.Split('_');

                    foreach (var subS in subSplit.Where(i => !string.IsNullOrEmpty(i)))
                    {
                        yield return(subS);
                    }
                }
            }
        }