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

初步实现想法很简单,直接获取字符数均分行数,再利用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。

C#按照指定长度分割中英文字符串的更多相关文章

  1. C#利用substring按指定长度分割字符串

    这几天学习分析声音的波形数据,接收到的是十六进制的数据,需要将数据转换成十进制再绘图,这个过程涉及到字符串的分割,正好可以促进自己对C#相关知识的学习.说到分割字符串,我首先想到的是Split,但根据 ...

  2. 用C#截取指定长度的中英文混合字符串

    很早以前写过一篇文章(用C#截取指定长度的中英文混合字符串),但是对性能没有测试,有人说我写的这个方法性能有问题,后来想,可能真会有BT之需求要求传入一个几万K甚至几M体积的字符串进来,那将会影响正则 ...

  3. C#按指定长度分割字符串

    C#按指定长度分割字符串   这几天学习分析声音的波形数据,接收到的是十六进制的数据,需要将数据转换成十进制再绘图,这个过程涉及到字符串的分割,正好可以促进自己对C#相关知识的学习.说到分割字符串,我 ...

  4. (C#)生成指定长度的随机字符串的通用方法

    .NET(C#)生成指定长度的随机字符串的通用方法,此方法可以指定字符串的长度,是否包含数字,是否包含符号,是否包含小写字母,是否包含大写字母等, 源码: #region 生成指定长度的随机字符串 / ...

  5. php中将数组转换为指定符号分割的字符串

    如想将一个数组转换为以“,”分割的字符串,只需如下: implode(',', arr);

  6. js 格式化时间、字符串指定长度、随机字符串

    格式化字符串长度 方法 function formatWidth(str, width){ str += '' if(str.length<width) '+str, width) else r ...

  7. CSS实现文字内容不被截断当超出指定长度时该字符串自动整体换到下一行

    效果图: 1.内容不被截断 span {       overflow:hidden;       white-space:nowrap;       text-overflow:ellipsis;  ...

  8. commons-text 生成指定长度的随机字符串

    package com.skylink.junge.demo; import java.util.HashSet; import java.util.Set; import org.apache.co ...

  9. iOS 生成随机字符串 从指定字符串随机产生n个长度的新字符串

    随机字符串 - 生成指定长度的字符串 -(NSString *)randomStringWithLength:(NSInteger)len { NSString *letters = @"a ...

随机推荐

  1. [iOS] 为文本加上横线方法

    _oldPriceLabel.text = "; _oldPriceLabel.textColor = [UIColor lightGrayColor]; NSMutableAttribut ...

  2. cron 任务

    相关文件 /etc/crontab /etc/cron.deny 设置哪个用户有权限运行 cron 任务 /var/spool/cron/root /var/spool/cron/user /var/ ...

  3. maven学习(下)利用Profile构建不同环境的部署包

    接上回继续,项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(test).预发布环境(pre) ...

  4. ffmpeg 常用命令

    mp4中的h264编码,而h264有两种封装: 一种是annexb模式,传统模式,有startcode,SPS和PPS是在ES中:另一种是mp4模式,一般mp4.mkv.avi会没有startcode ...

  5. 11. KVC And KVO

    1. KVC And KVO  的认识 KVC/KVO是观察者模式的一种实现  KVC全称是Key-value coding,翻译成键值编码.顾名思义,在某种程度上跟map的关系匪浅.它提供了一种使用 ...

  6. 顺序查找SequentialSearch

    #include <stdio.h>int SequentialSearch(int *a,int n,int x);int main(void){ //num代表查找的数 int num ...

  7. JavaScript 嵌套 书名号 查询

    字符串中查找嵌套书名号 ,一开始想用正则来做的,最后发现正则不可能达到我的需求(可能是我正则理解不够,哈哈),所以写下了这个方法:只做了三层,如果你要更多,可以自己添加,哈哈//提取查询关键字,sou ...

  8. [图像]判断图片是PNG还是JPG格式

    typedef NS_ENUM(NSInteger, NSPUIImageType) { NSPUIImageType_JPEG, NSPUIImageType_PNG, NSPUIImageType ...

  9. Java实现画八卦

    八卦是由多个圆叠加而成,如果我们让每个圆都有自己的颜色,那么具体结构便一目了然,如下图所示: 显然只要令对应的圆颜色相同,就能达到我们预期的效果. 用Java就能轻松画出来: import java. ...

  10. *** $CI =& get_instance() 用法:关于CodeIgniter中get_instance() 函数

    使用场景: 注意 get_instance 的使用场景,这个方法并不是用在控制器中的.而是用在控制器外面,比如类库中,想操作 CI 超级对象的时候,超级对象实际上就是当前控制器的实例. 你随便下个CI ...