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 else 25 { 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 else 41 { 42 template = "已经超过了{0:N0}个字"; 43 44 isOutOfRange = true; 45 } 46 return string.Format(template, Math.Abs(textRemainLength)); 47 }
执行效果
标签:
Winform
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述