zoukankan      html  css  js  c++  java
  • 完美分割字符串,实现字符串的splict功能

    class Str:Client_C    

    {        

      string val;        

      string[] str = new string[100];      

      public void StrT1()        

      {            

        //1.正常情况            

        //2.两个分隔符相邻            

        //3.以分隔符开始或者结束。            

        //如果只有一次,做个细小的改变,让他跟随又规律的其他            

        int nIdx = -1;            

        int xIdn = val.IndexOf(',', 0);  //必须从0开始,而不是现在的nIdx=-1

                int maxIdn = val.Length-1;            

        int i = 0;                        

        while (xIdn <= maxIdn && xIdn!=-1)            

        {

                      nIdx++;//将到达正式字符串,从此开始截取。,,hh                 //1.以分隔符开始,或者相邻,处理特殊情况                                if (nIdx == xIdn)                

          {                    

            str[i++] = "";                     //在小于最大索引的情况下递增,等于最大都不往下找了                    

            if (xIdn < maxIdn)                    

            {                        

              //nIdx不变,寻找下一个Idx                        

              xIdn = val.IndexOf(',', nIdx + 1);                        

              continue;                    

            }                    

            else //如果nIdx == xIdn,那么nIdx不变,xIdx该成-1,代表结束                    

            {                        

              xIdn = -1;                        

              break;                    

            }                

          }                

          str[i++] = val.Substring(nIdx, xIdn - nIdx); 

          //想想为什么是xIdx-nIdx,想想什么是下标,现在的nIdx和xIdx各代表什么,在什么位置。                

          nIdx = xIdn;                 //从后一个分隔符的下一个标记开始查                

          xIdn = val.IndexOf(',', nIdx+1);            

        }            

        //最后一次的时候,xIdn失效-1,同时也处理了以分隔符结束的情况,截取0个字符串的时候,结果为空,恰好            

        //没经过while循环内的nIdx++,标记还停留在分隔符位置,所以要从nIdx+1开始            

        str[i] = val.Substring(nIdx+1, maxIdn - nIdx);//nIdx还未加1,计算长度的时候,直接相减恰好

        Print();        

    }        

    public void Print()        

    {            

      StringBuilder sb = new StringBuilder();            

      foreach (string item in str)            

      {                

        sb.Append(item + "  ");            

      }            

      Console.WriteLine(sb.ToString());        

    }

            public void Client()        

       {

                StrT1();        

      }    

    }

    总结:编程的关键不在于处理好常规情况,而是处理好特殊情况,然后将两种情况结合起来。

  • 相关阅读:
    网络编程最佳实践一
    【NYOJ】[599]奋斗的小蜗牛
    【NYOJ】[599]奋斗的小蜗牛
    【NYOJ】[477]A+B Problem III
    【NYOJ】[477]A+B Problem III
    【NYOJ】[811]变态最大值
    【NYOJ】[811]变态最大值
    【POJ】[1417]True Liars
    【POJ】[1417]True Liars
    【杭电】[3038]How Many Answers Are Wrong
  • 原文地址:https://www.cnblogs.com/Ellfelo/p/sd.html
Copyright © 2011-2022 走看看