判斷String字串中是否有連續的數字,有連續的就縮寫(比如:String str="1,2,3,7,10,11,12,13,14,15" 變為"1-3,7-7,10-15")
阿新 • • 發佈:2018-12-30
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"