1. 程式人生 > >判斷String字串中是否有連續的數字,有連續的就縮寫(比如:String str="1,2,3,7,10,11,12,13,14,15" 變為"1-3,7-7,10-15")

判斷String字串中是否有連續的數字,有連續的就縮寫(比如:String str="1,2,3,7,10,11,12,13,14,15" 變為"1-3,7-7,10-15")

			string newList="";
			string str="1,2,3,7,10,11,12,13,14,15";//string字串
			int min;
            int max;
            if (str!=null&&str.Length>0) { 
                string[] strArr = str.Split(',');//將string字串轉化為string陣列
                //將string陣列轉化為int陣列
                int[] Arr = new int[strArr.Length];
                for (int i = 0; i <strArr.Length; i++)
                {
                    Arr [i] = Convert.ToInt32(strArr[i].ToString());
                }
                //先將縮寫時-兩端的數字min-max都設為Arr[0]
                min = Arr[0];
                max = Arr[0];
                //再遍歷int陣列
                for (int i = 0; i < Arr.Length;)
                {
                	//比較相鄰兩個數是否為連續
                   int j = i + 1;
                   if (j >= Arr.Length) j=i;//注意:因為j=i+1,所以j會出現超出陣列下標範圍的情況
                   //先比較第一個和第二個,如果連續,再比較第二個和第三個...直到出現不連續時就輸出縮寫1-3,再進行下面數字的比較
                   if (Arr[i] == (Arr[j] - 1))//如果連續,就先暫時把Arr[j]賦值給-右側的數字
                   {
                       max = Arr[j];
                       i = j;
                   }
                   else {
                       if (i == Arr.Length - 1)
                       {
                           newList += min + "-" + max;//如果沒有這個判斷最後會輸出newlist="1-3,7-7,10-15,"會多一個‘,’
                       }
                       else
                       {
                           newList += min + "-" + max + ",";
                       }
                       i = i + 1;//將3變為7,7與後面的數字比較
                       //此時將min和max都賦值為7
                       if (i < Arr.Length)
                       {
                           min = Arr[i];
                           max = Arr[i];
                       }
                   }
                }
           }
           return newList;//newlist="1-3,7-7,10-15"