一个让我比较郁闷的需求、、
2016-03-08 10:41
176 查看
产品经理给了一个需求,让我着实比较郁闷,不过理论上讲世界上是没有没答案的问题的所以只能按照需求给出个相对可以实现的结果。
需求如下:
淘宝店铺的标题展示规则:因为做移动互联网的,手机屏幕毕竟很小,淘宝给的接口中的标题又比较长所以只能是去做相应的截取了
1.过滤特殊符号,以空格代替
2.过滤url编码:将类似 %3F 去除
3.过滤空白,去除标题首尾空白
4.以第一个空格前的词组为标题,如字段长度8个字符(4个汉字)以下(不含8个字符)时,以第二个空格前第一个空格后的词组为标题。
5.当第一个文字词组和第二个文字词组均在8个字符(4个汉字以下)依次类推,以第三,第四个词组作为标题。若所有标题均不能满足需求,则以第一个文字词组为标题。
需求中的字符 其实应该是字节的吧、、、、咳咳
实现代码如下:
需求如下:
淘宝店铺的标题展示规则:因为做移动互联网的,手机屏幕毕竟很小,淘宝给的接口中的标题又比较长所以只能是去做相应的截取了
1.过滤特殊符号,以空格代替
2.过滤url编码:将类似 %3F 去除
3.过滤空白,去除标题首尾空白
4.以第一个空格前的词组为标题,如字段长度8个字符(4个汉字)以下(不含8个字符)时,以第二个空格前第一个空格后的词组为标题。
5.当第一个文字词组和第二个文字词组均在8个字符(4个汉字以下)依次类推,以第三,第四个词组作为标题。若所有标题均不能满足需求,则以第一个文字词组为标题。
需求中的字符 其实应该是字节的吧、、、、咳咳
实现代码如下:
private String formatTitle() { this.subTitle = this.title; for (String a : InitUtils.getInstance().getSpecialList()) {//这个单例是获取那个特殊字符的列表的 if (this.subTitle.indexOf(a) > -1) { this.subTitle = this.subTitle.replace(a, " ").replace("amp;", "").trim(); } } String[] array = this.subTitle.split(" "); if (array[0].length() >= 4) { this.subTitle = array[0]; } else { String temp = array[array.length - 1]; for (int i = 0; i < array.length; i++) {//这里的冒泡其实就是找到最长的那个啦 for (int j = array.length - 1; j > i; j--) { if (array[j].getBytes().length < array[j - 1].getBytes().length) { temp = array[j - 1]; array[j] = array[j - 1]; array[j - 1] = temp; } } } this.subTitle = temp; } if (this.subTitle.length() >= 10) { this.subTitle = this.bstring(this.subTitle, 16) + "..."; } return this.subTitle; } //使用subString 进行截取会按照字符串的长度进行截取,显然会出现只剩几个英文字母的情况,而这也不是产品所想要的,而且他的意思也是 截取的时候要通过字节计算长度,而这就不可避免的出现把汉字截取成一半的情况了所以使用以下的方法对字符串进行截取 public String bstring(String s, int length){ try { int i = 2; byte[] bytes = s.getBytes("Unicode"); int n = 0; for(;i<bytes.length&&n<length;i++){ if(i%2==1){//奇数位置 ,是字节中的第二个位置 n++; }else{ if(bytes[i]!=0){//这里如果不等于0,就说明当前的字节是属于一个汉字的,需要把截取长度加1哦 n++; } } } if(i%2==1){ if(bytes[i-1]!=0){ i-=1; }else{ i+=1; } } return new String(bytes,0,i,"Unicode"); } catch (UnsupportedEncodingException e) { LogUtils.getError().error("cut tabshops title errror", e); } return ""; }
相关文章推荐
- android:layout_weight权重分析
- mysql 错误代码 1045 解决
- KVC/KVO简单用法
- L版本自动背光调节,从亮到暗比较慢的问题
- 安卓Service组件使用系列2:使用Service下载网络图片并存储于sdCard卡上
- inputtype
- 三星I9023用数据线连接到电脑上怎么没反应,只有充电的显示
- Android 壁纸设置代码 详解
- eclipse平台升级- 粘贴功能失效
- 定位人生之感
- java内省机制
- 使用 dom4j 解析 XML
- eclipse平台升级- refresh 菜单图片不显示
- 我眼中的职业化
- 你把青春给了谁
- Synergy 一套键鼠同时控制多台电脑的神器
- 杜子建:一个以弱势强的存在主义者
- mysql 优化之innodb_flush_log_at_trx_commit
- android收起软键盘
- 信息熵