C#按照指定长度分割中英文字符串

最近有一个需求:玩家发的不同长度文字,需要自适应行数。

初步实现想法很简单,直接获取字符数均分行数,再利用string.substring()切割即可。但是显而易见,由于一般字体下,中文显示宽度一般是两个数字|字母的宽度,所以直接分割的每一行元素个数一致,但是显示长度却长短不一。

解决办法:利用递归实现此方法:

 

private void GetSubStringList(string str,int length,List<string> list)
{
     string content = "";
     string nextSub = "";
     byte[] content    = System.text.Encoding.Unicode.GetBytes(str);
     if (length>content.Length)
    {
        contentSub = str;
        if (contentSub != "")
        {
            list.Add(contentSub);
        }
    }
    else
    {
        int index = 0;
        for (int i = 0;i<length*2 &&i<str.Length*2;i++   )
        {
            if ( i%2 != 0 && content[i] == 0)
            {
                index++;
            }
        }
        index += (int)Math.floor((double)(length - index)/2f); //汉字数*2+字符数=length
        if ( index >str.Length)
        {
            index = str.Length;
        }
        contentSub = str.Substring(0,index);
        nextSub = str.Substring(index);
        list.Add(contentSub);
        
        GetSubStringList(nextSub,length,list);
    }
}

  参数:str:需要切割的字符串;

       length:每一行显示的长度(字节数);

       list:保存每一行的内容,使用时遍历取出即可。

 

  主要利用到 System.text.Encoding.Unicode.GetBytes()方法,将string字符串转换成Unicode编码的byte数组。Unicode编码方式中:字符类型的第二字节为0;汉字第二字节大于0。

转载于:https://www.cnblogs.com/lwblog/p/4946189.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、 修改字典格式,提高字典加载速度 2、 增加对英文专业名词的支持 如C++,C#等只要加入字典就可以被分出来 3、 增加词频判断功能,在无法取舍时根据词频取舍 4、 增加优先优先词频选项,通过这个选项动态决定分词粒度 需打开 FreqFirst 5、 增加中文人名前后缀统计和根据该统计定位人名的功能 6、 增加中文人名和未登录词出现频率统计功能 7、 增加自动更新字典功能,对超过阈值的人名和未登录词自动插入字典 需打开 AutoInsertUnknownWords 开关 并设置 UnknownWordsThreshold,(不推荐自动插入,推荐手工插入) 8、 增加定期保存字典和统计结果功能 需设置 AutoSaveInterval 9、 增加KTDictSeg.xml配置文件来配置分词参数 10、增加对Lucene.net 的支持,提供 KTDictSegAnalyzer 分析器给Lucene.net 11、增加字典管理功能,可以添加删除修改字典 12、字典管理中提供从未登录词中批量插入字典功能,可帮助使用者手工选择合适的未登录词插入字典(推荐) 13、提供一个新闻搜索的简单例子,采用Lucene.net+KTDictSegAnalyzer+KTDictSeg,项目名为Demo.KTDictSegAnalyzer 14、将所有ArrayList 改为List 其中 src_V1.3.01是源码 rel_V1.3.01 包含所有的可执行文件,配置文件;Data目录下是词库,停用词表,以及我目前统计的人名前后缀词表;News 目录下是Lucene.net为 新闻搜索的例子建的索引。 News.zip 是上图中批量插入时要输入的XML文件,它包含3万条从新浪和中华网抓下来的过时的新闻,大约2000万字左右,可供各位朋友学习使用。 注意:如果要导入news.xml,这个文件必须要和Demo.KTDictSegAnalyzer.exe放在同一个目录下!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值