C#中字符压缩和解压缩
2016/06/30 .牛栏前
1 static void Main(string[] args) 2 { 3 string result = "xxxyyyyyyz"; 4 Console.WriteLine(result); 5 Console.WriteLine(ExtractString("9a5b")); 6 Console.ReadLine(); 7 } 8 9 //StringBuilder在拼接大量字符串的時候相對String來說具有很高的效率,這是 10 //由於StringBuilder在內部處理上使用了字符串的鏈式存儲表示法,可設置容量, 11 //若超過容量,會重新分配存儲空間 12 13 //壓縮 14 public static string CompressString(string str) 15 { 16 const int iMaxCount = 9; 17 StringBuilder stringBuilder = new StringBuilder(); 18 int countChar = 1; //計數器 19 str = str.Trim() + " "; //防止循環溢出,加上空格 20 21 for (int i = 0; i < str.Length - 1; i++) 22 { 23 if (str[i + 1] == str[i])//有連續字符 24 { 25 countChar++;//計數器加一 26 if (countChar > iMaxCount) //如果大於9,壓入stringBuilder,如a10=a9a1解決二義性(如a101b3的多種理解) 27 { 28 stringBuilder.Append(iMaxCount.ToString()); 29 stringBuilder.Append(str[i]); 30 countChar = 1; 31 } 32 continue; 33 // break; 34 } 35 else //如果不等,就將當前的字符和計數壓入stringBuilder 36 { 37 if (countChar == 1) //如果字符為1則不顯示 38 { 39 stringBuilder.Append(str[i]); 40 countChar = 1; 41 } 42 else 43 { 44 stringBuilder.Append(countChar.ToString()); 45 stringBuilder.Append(str[i]); 46 countChar = 1; 47 } 48 49 } 50 } 51 52 return stringBuilder.ToString(); 53 } 54 55 //解壓縮 56 private static string ExtractString(string str) 57 { 58 int a; 59 StringBuilder stringBuilder = new StringBuilder(); 60 str = str.Trim() + " "; 61 for (int i = 0; i < str.Length - 1;i=i+2 ) 62 { 63 a = (int)(str[i])-(int)'0'; //將字符轉換為整型 64 for (int j = 0; j < a; j++) 65 { 66 stringBuilder.Append(str[i + 1]); 67 } 68 } 69 return stringBuilder.ToString(); 70 }
好的代码就和美食一样,都是需要时间烹饪出来的!

浙公网安备 33010602011771号