類比Visual Studio中的完全符合尋找

來源:互聯網
上載者:User

標籤:

類比Visual Studio中的完全符合尋找
 
public enum EnumDataType    {        中文 = 0,        英文 = 1,        數字 = 2,        特殊字元 = 3,        中文與特殊字元 = 4,        英文與數字 = 5,    }

 

public static class CharExtend    {        /// <summary>        /// 獲得該字元類型        /// </summary>        /// <param name="item"></param>        /// <returns></returns>        public static EnumDataType GetDataType(this char item)        {            //範圍(0x4e00~0x9fff)轉換成int(ch-from~ch-end)            int chfrom = Convert.ToInt32("4e00", 16);            int chend = Convert.ToInt32("9fff", 16);            if (item >= ‘0‘ && item <= ‘9‘)                return EnumDataType.數字;            else if (item >= ‘A‘ && item <= ‘z‘)                return EnumDataType.英文;            else            {                int code = Char.ConvertToUtf32(item.ToString(), 0);                if (code >= chfrom && code <= chend)                    return EnumDataType.中文;                else                    return EnumDataType.特殊字元;            }        }    }

 

public static class BoolExtend    {        public static bool IsTrue(this bool bl)        {            return bl==true;        }        public static bool IsFalse(this bool bl)        {            return bl == false;        }    }

 

/// <summary>        /// 尋找字串strB在strA中的起止索引(類比Visual Studio尋找)        /// </summary>        /// <param name="strA">被尋找的字串</param>        /// <param name="strB">要尋找的字串</param>        /// <param name="fullMatched">是否全字匹配(true/false)</param>        /// <returns>int值,沒找到這返回-1</returns>        public static int IndexOf(string strA, string strB, bool fullMatched)        {            /*             * 如果要尋找的是中文、特殊符號,則完全符合與非完全符合結果一樣             *              * 如果要尋找的是英文、數字,則需做特殊處理(完全符合格式【其他】【英文/數字】【其他】             * 即還需匹配前後字元類型必須與要尋找的類型不同             *              */            //如果要查字串長度大於被尋找字串,則直接返回-1            if (strB.Length > strA.Length)                return -1;            EnumDataType[] types = new EnumDataType[2];            if (fullMatched.IsTrue())            {                #region MyRegion                if ((strB[0].GetDataType() == EnumDataType.中文 || strB[0].GetDataType() == EnumDataType.特殊字元))                {                    types[0] = EnumDataType.中文與特殊字元;                }                else                {                    types[0] = EnumDataType.英文與數字;                }                if ((strB[strB.Length - 1].GetDataType() == EnumDataType.中文 || strB[strB.Length - 1].GetDataType() == EnumDataType.特殊字元))                {                    types[1] = EnumDataType.中文與特殊字元;                }                else                {                    types[1] = EnumDataType.英文與數字;                }                 #endregion            }            int index = -1;            if (strA.Length > 1)            {                for (int i = 0; i <= strA.Length - strB.Length; i++)                {                    //每次在strAight中取等長的字串與strB比較,判斷是否相等                    if (strA.Substring(i, strB.Length) == strB)                    {                        //不是全字匹配                        if (fullMatched.IsFalse())                        {                            //strB在strA中的找到的第一個匹配的起始索引為i                            index = i;                            break;                        }                        else//是全字匹配                        {                            //判斷變數i是開始還是結束                            if (i > 0 && i < strA.Length - strB.Length)                            {                                #region MyRegion                                //匹配項前後第一個字元都不是字母和數字                                char start = strA.Substring(i - 1, 1)[0];                                char end = strA.Substring(i + strB.Length, 1)[0];                                EnumDataType startType=start.GetDataType();                                EnumDataType endType = end.GetDataType();                                if (types[0] == EnumDataType.中文與特殊字元)                                { }                                else if (types[0] == EnumDataType.英文與數字 && startType != EnumDataType.英文 && startType != EnumDataType.數字)                                { }                                else                                {                                    continue;                                }                                if (types[1] == EnumDataType.中文與特殊字元)                                { }                                else if (types[1] == EnumDataType.英文與數字 && endType != EnumDataType.英文 && endType != EnumDataType.數字)                                { }                                else                                {                                    continue;                                }                                //通關後找到索引                                index = i;//是全字匹配                                break;                                 #endregion                            }                            else if (i == 0)//如果是開始                            {                                #region MyRegion                                if (i + strB.Length >= strA.Length)                                {                                    index = i;//是全字匹配                                    break;                                }                                else                                {                                    char end = strA.Substring(i + strB.Length, 1)[0];                                    EnumDataType endType = end.GetDataType();                                    if (types[1] == EnumDataType.中文與特殊字元)                                    { }                                    else if (types[1] == EnumDataType.英文與數字 && endType != EnumDataType.英文 && endType != EnumDataType.數字)                                    { }                                    else                                    {                                        continue;                                    }                                    index = i;//是全字匹配                                    break;                                }                                #endregion                            }                            else if (i == strA.Length - strB.Length)//如果是結束                            {                                #region MyRegion                                char start = strA.Substring(i - 1, 1)[0];                                EnumDataType startType = start.GetDataType();                                if (types[0] == EnumDataType.中文與特殊字元)                                { }                                else if (types[0] == EnumDataType.英文與數字 && startType != EnumDataType.英文 && startType != EnumDataType.數字)                                { }                                else                                {                                    continue;                                }                                index = i;//是全字匹配                                break;                                 #endregion                            }                        }                    }                }            }            else            {                if (strA == strB)                    index = 0;            }            return index;        }

 

static void Main(string[] args)        {            TestIndexOf();            Console.Read();        }static void TestIndexOf()        {            string go = string.Empty;            do            {                Console.WriteLine("請輸入要被尋找的字串");                string strA = Console.ReadLine();                Console.WriteLine("請輸入要尋找的字串");                string strB = Console.ReadLine();                Console.WriteLine("是否全字匹配(Y/N)?");                string matched = Console.ReadLine().ToLower();                Console.WriteLine("內建的函數返回的索引值:" + ZJZCommon.Utility.IndexOf(strA, strB));                Console.WriteLine("自訂函數返回的索引值:" + ZJZCommon.Utility.IndexOf(strA, strB, matched == "y" ? true : false));                Console.WriteLine("是否繼續(Y/N)?");                go = Console.ReadLine().ToLower();            }            while (go == "y");        }

 轉載請註明出處:http://www.cnblogs.com/jzblogs/p/5670397.html

類比Visual Studio中的完全符合尋找

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.