完美分割字符串,實現字符串的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();        

  }    

}

 

 

總結:編程的關鍵不在於處理好常規情況,而是處理好特殊情況,然后將兩種情況結合起來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM