惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
Jina AI
Jina AI
博客园_首页
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Forbes - Security
Forbes - Security
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
N
News | PayPal Newsroom
S
Security Archives - TechRepublic
量子位
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
Cisco Blogs
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Scott Helme
Scott Helme
S
Securelist
Security Latest
Security Latest
爱范儿
爱范儿
TaoSecurity Blog
TaoSecurity Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
L
LINUX DO - 最新话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
美团技术团队
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
月光博客
月光博客
T
Tailwind CSS Blog
Cloudbric
Cloudbric
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
D
DataBreaches.Net
博客园 - 【当耐特】
有赞技术团队
有赞技术团队

博客园 - 三千

支持博客园,千万不能倒! [Flash开发笔记] 系列 FMS 中文帮助 (下载) [Flash开发笔记] ComboBox,List组件的二个函数 [Flash开发笔记] AS中保留多少位小数的函数 [Flash开发笔记]如何让Flash的swf文件在客户端不缓存 - 三千 - 博客园 [FMS开发笔记]理解应用程序实例(聊天室房间的划分) - 三千 - 博客园 [Flash开发笔记] List控件--删除指定label或data的项 - 三千 - 博客园 FMS如何连接FlashRemoting?(附示例源码下载) - 三千 - 博客园 我为什么在joyo购书(2) - 三千 - 博客园 Avant浏览器的插件妙用 我为什么在joyo购书 vss的ss.ini丢失或损坏导致的vss无法登录错误 [Flash开发笔记] Flash 执行exe文件 配置 SQL Server 2005 远程调试存储过程 把AIR update Beta 2 for Flash CS3 安装到Flash CS3 中文版 [Flash开发笔记] Flash中动态文本框与字母间距 [Flash开发笔记] Flash中动态文本框与遮罩的问题 《软件测试技术--测试入门》(ppt下载)
用C#截取指定长度的中英文混合字符串 改进版
三千 · 2008-03-06 · via 博客园 - 三千

很早以前写过一篇文章(用C#截取指定长度的中英文混合字符串),但是对性能没有测试,有人说我写的这个方法性能有问题,后来想,可能真会有BT之需求要求传入一个几万K甚至几M体积的字符串进来,那将会影响正则Match的速度,比如文章系统中就极有可能用到,今天有点时间,就改进了一下,代码如下:

    public static string getStr(string s,int l,string endStr)
    
{
        
string temp = s.Substring(0, (s.Length < l)?s.Length:l);
        
        
if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l)
        
{
            
return temp;
        }

        
for (int i=temp.Length;i>=0;i--)
        
{
            temp 
= temp.Substring(0,i);
            
if (Regex.Replace(temp,"[\u4e00-\u9fa5]","zz",RegexOptions.IgnoreCase).Length<=l-endStr.Length)
            
{
                
return temp + endStr;
            }
    
        }

        
return endStr;
    }



此修改版的方法多加了个参数"string endStr",是指当字符串"string s"超过指定长度"int l"时,对结尾的处理,比如要不要加上省略号"..."或加上其它字符。
另外,添加了省略号之后,省略号长度也是算在结果的长度之内了。

    用法如:

    getStr("中国1中国中国中1111中国", 23,"") 
    //output:中国1中国中国中1111中国

    getStr("中国1中国中国中1111中国", 23,"...") 
    //output:中国1中国中国中1111...

    getStr("中国1中国中国中1111中国中国", 23,"")    
    //output:中国1中国中国中1111中国

    getStr("中国1中国中国中1111中国中国", 23,"...")
    //output:中国1中国中国中1111...

----------------------------------------------------------------------

    补充:"kpz"回复说上边的方法会截取失真,而我又无法做到穷尽测试,所以换了另一种写法,为了考虑性能结果把逻辑搞的有点"晕",反复测试了多次,代码如下:

public static string getStr2(string s, int l,string endStr) 
    

        
string temp = s.Substring(0, (s.Length < l+1)?s.Length:l+1);    
        
byte[] encodedBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(temp);
        
        
string outputStr = ""
        
int count = 0;     
        
        
for (int i = 0; i < temp.Length; i++
        

            
if ((int)encodedBytes[i] == 63)
                count 
+= 2
            
else
                count 
+= 1

            
if (count <= l-endStr.Length)
                outputStr 
+= temp.Substring(i,1); 
            
else if (count>l)    
                
break;            
        }
 
        
        
if (count<=l)
        
{
            outputStr
=temp;
            endStr
="";
        }

        
        outputStr 
+= endStr;    
        
        
return outputStr; 
    }


用法和参数含义均同前,注意省略号也占位置,算了长度。