//计算总共字数和限制字数的Index位置
-(NSMutableArray *) unicodeLengthOfString: (NSString *) text
{
NSMutableArray *array = [NSMutableArray array];
float asciiLength = 0;
NSInteger maxmumShowIndex = 0;
for (NSUInteger i = 0; i < text.length; i++) {
unichar uc = [text characterAtIndex: i];
if (isalnum(uc)) {
asciiLength += 1.1;
}else{
asciiLength += isascii(uc) ? 1 : 2;
}
//计算可以显示的最大字数的Index位置
if (asciiLength /2 < _maxMumCharactors) {
maxmumShowIndex =i;
}
}
//所有的字数
NSUInteger unicodeLength = asciiLength / 2; if((NSInteger)asciiLength % 2) {
unicodeLength++;
} [array addObject:[NSNumber numberWithInteger:unicodeLength]];
[array addObject:[NSNumber numberWithInteger:maxmumShowIndex]];
return array;
}

  代码解释: 设中文字数宽度为2, 非中文(isascii)宽度为1, 数字宽度为1.

所有宽度之和为R, 所有字数之和为 H,  H = R / 2 + R%2,

上面的代码只是在计算刚刚超过限制字数时的Index位置。然后再截取或替换超过部分字符串。

  NSArray *titleTextLengthArray = [self unicodeLengthOfString:self.titleString];
if ([[titleTextLengthArray firstObject] integerValue] >_maxMumCharactors) {
NSInteger maxMumLength = [[titleTextLengthArray lastObject] integerValue];
self.titleString = [self.titleString stringByReplacingCharactersInRange:NSMakeRange(maxMumLength, self.titleString.length-maxMumLength) withString:@"..."];
}

    另外经过研究:self.titleString.length 其实是字符的个数。stringByReplacingCharactersInRange 这个方法也是针对字符数。

unichar uc = [text characterAtIndex: i]; 这个方法取的是具体的第几个字符。

IOS UTF8中文字母数字 组合时长度截取的更多相关文章

  1. js随机生成字母数字组合的字符串 随机动画数字

    效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...

  2. JS生成随机的由字母数字组合的字符串

    前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法   1 Math.random().toString(36).substr( ...

  3. 生成一个字母数字组合的n位随机码、随机数、随机字符串

    package com.cms.util; /** * 生成一个字母数字组合的n位随机码 * @author abc * */ public class CodeUtil { // private f ...

  4. 将Long类型转为字母数字组合的jar包---Hashids

    在设计数据库时,我有时喜欢使用自增Id,而不是uuid,但是在面对终端用户时,直接暴露id不是一个好的行为. 经过查询,可以使用 Hashids 这个jar包将id转为类似YouTube的大小写字母和 ...

  5. PHP字母数字验证码和中文验证码

    1:字母数字组合的验证码 HTML代码: 验证码:<input type="text" name="code"> <img onclick=& ...

  6. 通过JS生成由字母与数字组合的随机字符串

    在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定) 使用Math.random()与toString()方法的 ...

  7. js产生一个随机的字符串数字组合

    /** * 随机生成字符串 * @param randomFlag 产生任意长度随机字母数字组合 * @param min 任意长度最小位[固定位数] * @param max 任意长度最大位 * @ ...

  8. JAVAWEB项目实现验证码中文、英文、数字组合

    验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意 ...

  9. PHP中生成随机字符串,数字+大小写字母随机组合

    简单的生成随机字符串: /* * 生成随机字符串 * * $length 字符串长度 */ function random_str($length) { // 密码字符集,可任意添加你需要的字符 $c ...

随机推荐

  1. Java 创建xml文件和操作xml数据

    java中的代码 import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; ...

  2. OneProxy与其它数据库中间件的对比

    OneProxy 优点 性能 缺点 闭源,被商业公司掌控,到时候随别人蹂躏 可维护性极差,缺乏友好的出错信息,光维护这个环节就被他人掌控 定价不明 有没有这样的公司? 大到10wtps,但是没人能理解 ...

  3. 【EPplus】Column width discrepancy

    description Hi Jan, I have noticed that when I set a column width there is a discrepancy between the ...

  4. python 练习 18

    #!/usr/bin/python # -*- coding: UTF-8 -*- import time print time.strftime('%Y-%m-%d %H:%M:%S',time.l ...

  5. JVM性能调优

    摘自:http://uule.iteye.com/blog/2114697 JVM垃圾回收与性能调优总结 JVM调优的几种策略 一.JVM内存模型及垃圾收集算法  1.根据Java虚拟机规范,JVM将 ...

  6. inout

    在函数声明时就用inout代替var  这样以后可以在函数内部修改外面的值 类似于C语言的传入指针 func change (inout num:Int) { num = 10 } var a = 2 ...

  7. OC 实例变量(instance var)与属性(@property)的关系 isa指针

    实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和 ...

  8. this和super关键字

    this关键字: 1.引用成员变量 2.通过this(参数列表)调用类的重载的构造方法 3.返回对象的值:使用return this,来返回某个类的引用. super关键字: 1.super是一个引用 ...

  9. JAVA读取EXCEL文件异常Unable to recognize OLE stream

    异常: jxl.read.biff.BiffException: Unable to recognize OLE stream at jxl.read.biff.CompoundFile.<in ...

  10. VS构建工具介绍

    VS构建工具介绍 我们都知道C/C++源代码要生成可执行的.exe程序,需要经过编译.链接的过程.你在VS工具中只需要选择菜单Build或按一下F5可以编译.链接.运行了,其实IDE帮我隐藏了好多的具 ...