2012年8月3日星期五

C#实现与新浪微博相同算法的字数统计函数,要的拿走。

C#实现与新浪微博相同算法的字数统计函数,要的拿走。

微博剩余字数统计新浪官方算法的C#实现,要的朋友请保存。

参数text是正文内容。

isOutOfRange用来判断文字是否溢出,以此来控制发送按钮的可用状态。

 1 public static string GetContentLengthString(string text, out bool isOutOfRange) 2 { 3     text = text.Trim(); 4     text = Regex.Replace(text, "\r\n", "\n"); 5     int textLength = 0; 6     if (text.Length > 0) 7     { 8         int min = 41, max = 140, urlLen = 20; 9         var n = text;10         var r = Regex.Matches(text, @"http://[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+([-A-Z0-9a-z_$.+!*()/\\\,:;@&=?~#%]*)*");11         var total = 0;12         for (int m = 0, p = r.Count; m < p; m++)13         {14             var url = r[m].Value;15             var byteLen = url.Length + Regex.Matches(url, @"[^\x00-\x80]").Count;16             if (Regex.IsMatch(url, @"^(http://t.cn)"))17             {18                 continue;19             }20             else if (Regex.IsMatch(url, @"^(http:\/\/)+(weibo.com|weibo.cn)"))21             {22                 total += byteLen <= min ? byteLen : (byteLen <= max ? urlLen : (byteLen - max + urlLen));23             }24             else25             {26                 total += byteLen <= max ? urlLen : (byteLen - max + urlLen);27             }28             n = n.Replace(url, "");29         }30         textLength = (int)Math.Ceiling((total + n.Length + Regex.Matches(n, @"[^\x00-\x80]").Count) / 2.00d);31     }32 33     int textRemainLength = 140 - textLength;34     string template = string.Empty;35     if (textRemainLength >= 0)36     {37         template = "还可以输入{0:N0}个字";38         isOutOfRange = false;39     }40     else41     {42         template = "已经超过了{0:N0}个字";43 44         isOutOfRange = true;45     }46     return string.Format(template, Math.Abs(textRemainLength));47 }

执行效果


TAG: