IOS UTF8中文字母数字 组合时长度截取
//计算总共字数和限制字数的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中文字母数字 组合时长度截取的更多相关文章
- js随机生成字母数字组合的字符串 随机动画数字
效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...
- JS生成随机的由字母数字组合的字符串
前言 最近有个需求,是需要生成3-32位长度的字母数字组合的随机字符串,另一个是生成43位随机字符串. 方法一 奇妙的写法 1 Math.random().toString(36).substr( ...
- 生成一个字母数字组合的n位随机码、随机数、随机字符串
package com.cms.util; /** * 生成一个字母数字组合的n位随机码 * @author abc * */ public class CodeUtil { // private f ...
- 将Long类型转为字母数字组合的jar包---Hashids
在设计数据库时,我有时喜欢使用自增Id,而不是uuid,但是在面对终端用户时,直接暴露id不是一个好的行为. 经过查询,可以使用 Hashids 这个jar包将id转为类似YouTube的大小写字母和 ...
- PHP字母数字验证码和中文验证码
1:字母数字组合的验证码 HTML代码: 验证码:<input type="text" name="code"> <img onclick=& ...
- 通过JS生成由字母与数字组合的随机字符串
在项目中可能需要随机生成字母数字组成的字符,如生成3-32位长度的字母数字组合的随机字符串(位数不固定)或者生成43位随机字符串(位数固定) 使用Math.random()与toString()方法的 ...
- js产生一个随机的字符串数字组合
/** * 随机生成字符串 * @param randomFlag 产生任意长度随机字母数字组合 * @param min 任意长度最小位[固定位数] * @param max 任意长度最大位 * @ ...
- JAVAWEB项目实现验证码中文、英文、数字组合
验证码基础 一.什么是验证码及它的作用 :验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意 ...
- PHP中生成随机字符串,数字+大小写字母随机组合
简单的生成随机字符串: /* * 生成随机字符串 * * $length 字符串长度 */ function random_str($length) { // 密码字符集,可任意添加你需要的字符 $c ...
随机推荐
- Android SQlite详解
在项目开发中,我们或多或少都会用到数据库.在Android中,我们一般使用SQLite,因为Android在android.database.sqlite包封装了很多SQLite操作的API.我自己写 ...
- 配置NGReport 报告中文
1. 测试报告的名称 在测试开始或测试监听器的类中加上下面一句代码即可: System.setProperty("org.uncommons.reportng.title", &q ...
- ActiveX控件(ATL篇)
目录 第1章 VC++6.0创建 2 1.1 目标 2 1.2 创建项目 2 1.3 增加COM类 4 1.4 属性 7 1.5 事件 8 1.6 实现连接点 ...
- 【转】 C++ map的基本操作和使用
1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...
- golang为LigerUI编写简易版本web服务器
package main import ( "io/ioutil" "log" "net/http" "os" ) va ...
- 【bzoj1047】理想的正方形
[bzoj1047]理想的正方形 题意 给定\(a*b\)由整数组成的矩形. 现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小. \(1\leq a,b\leq 10 ...
- 20145218 《Java程序设计》第02次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 一.实验内容 初步掌握单元测试和T ...
- (转)Android APK反编译详解
转载地址:http://blog.csdn.net/ithomer/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到 ...
- Android利用V4包中的SwipeRefreshLayout实现上拉加载
基本原理 上拉加载或者说滚动到底部时自动加载,都是通过判断是否滚动到了ListView或者其他View的底部,然后触发相应的操作,这里我们以 ListView来说明.因此我们需要在监听ListView ...
- css3制作滚动按钮
1,中间圆点用到css3的gradient属性 2,运动用到css3的transition属性 3,需要写各个浏览器的兼容 代码如下 <!DOCTYPE html> <html la ...