从某个位置开始查找一个单词,这个单司是第一次出现,找到即返回,区分大小写。(修正)

       

      上面 _delete 是一体的,但_IndexOfWord  把它变成  _ delete

       是因为加入了

        public static bool

       _IsProgramOperationalCharacter(this char ch) => "+-*/%|<>=".IndexOf(ch) != -1; 

       

       /// <summary>
        /// 从某个位置开始查找一个单词,这个单司是第一次出现,找到即返回,区分大小写。
        /// </summary>
        /// <param name="sText"></param>
        /// <param name="sWord"></param>
        /// <param name="nFindStart"></param>
        /// <returns></returns>
        /// 创建时间: 2022-08-08      最后一次修改时间:2022-09-18
        public static int _IndexOfWord(this string sText, string sWord, int nFindStart = 0)
        {
            if(sWord.Length == 0) return -1 ;  // 不加上这名,_IndexWord("") 会进入死循环


            if (nFindStart <= 0) nFindStart = 0;

            if (sText.Length - nFindStart < sWord.Length ) return -1;


            int nPos = sText.IndexOf(sWord, nFindStart);
             
            while (nPos != -1)
            {
                bool bPrev = false;
                bool bNext = false;
                int nPrev = nPos - 1;
                int nNext = nPos + sWord.Length;

                if (nPrev > 0)
                {
                    char chPrev = sText[nPrev];

                    if (chPrev._IsPunctuation() || chPrev._IsUnPrintable() || chPrev._IsControl() || chPrev._IsWhiteSpace() || chPrev._IsSeparator() || 
                        chPrev._IsProgramOperationalCharacter())
                    {                         
                         
                         bPrev = true;
                    }      
                }
                else
                {
                    bPrev = true;
                }

                if(nNext > 0 && nNext < sText.Length)
                {
                    char chNext = sText[nNext];
   
                    if (chNext._IsPunctuation() || chNext._IsUnPrintable() || chNext._IsControl() || chNext._IsWhiteSpace() || chNext._IsSeparator() ||
                        chNext._IsProgramOperationalCharacter())
                    {     
                        bNext = true;
                    }           
                }
                else
                {
                    bNext = true;
                }

                if (bNext && bPrev) return nPos;  //正确,是单词


                //不正确,继续查找
                nPos = sText.IndexOf(sWord, nPos + sWord.Length);
            }

            return nPos;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值