zoukankan      html  css  js  c++  java
  • 一个让我比较郁闷的需求、、

    产品经理给了一个需求,让我着实比较郁闷,不过理论上讲世界上是没有没答案的问题的所以只能按照需求给出个相对可以实现的结果。

    需求如下:

    淘宝店铺的标题展示规则:因为做移动互联网的,手机屏幕毕竟很小,淘宝给的接口中的标题又比较长所以只能是去做相应的截取了

    1.过滤特殊符号,以空格代替
    2.过滤url编码:将类似 %3F 去除
    3.过滤空白,去除标题首尾空白
    4.以第一个空格前的词组为标题,如字段长度8个字符(4个汉字)以下(不含8个字符)时,以第二个空格前第一个空格后的词组为标题。
    5.当第一个文字词组和第二个文字词组均在8个字符(4个汉字以下)依次类推,以第三,第四个词组作为标题。若所有标题均不能满足需求,则以第一个文字词组为标题。

    需求中的字符 其实应该是字节的吧、、、、咳咳 

    实现代码如下:

          

     1 private String formatTitle() {
     2 
     3       this.subTitle = this.title;
     4       for (String a : InitUtils.getInstance().getSpecialList()) {//这个单例是获取那个特殊字符的列表的
     5         if (this.subTitle.indexOf(a) > -1) {
     6           this.subTitle = this.subTitle.replace(a, " ").replace("amp;", "").trim();
     7         }
     8       }
     9       String[] array = this.subTitle.split(" ");
    10       if (array[0].length() >= 4) {
    11         this.subTitle = array[0];
    12       } else {
    13         String temp = array[array.length - 1];
    14         for (int i = 0; i < array.length; i++) {//这里的冒泡其实就是找到最长的那个啦
    15           for (int j = array.length - 1; j > i; j--) {
    16             if (array[j].getBytes().length < array[j - 1].getBytes().length) {
    17               temp = array[j - 1];
    18               array[j] = array[j - 1];
    19               array[j - 1] = temp;
    20              }
    21           }
    22         }
    23         this.subTitle = temp;
    24       }
    25 
    26       if (this.subTitle.length() >= 10) {
    27         this.subTitle = this.bstring(this.subTitle, 16) + "...";
    28       }
    29       return this.subTitle;
    30     }
    31     //使用subString 进行截取会按照字符串的长度进行截取,显然会出现只剩几个英文字母的情况,而这也不是产品所想要的,而且他的意思也是 截取的时候要通过字节计算长度,而这就不可避免的出现把汉字截取成一半的情况了所以使用以下的方法对字符串进行截取
    32     public String bstring(String s, int length){
    33     try {
    34       int i = 2;
    35       byte[] bytes = s.getBytes("Unicode");
    36       int n = 0;
    37       for(;i<bytes.length&&n<length;i++){
    38         if(i%2==1){//奇数位置 ,是字节中的第二个位置
    39           n++;
    40         }else{
    41           if(bytes[i]!=0){//这里如果不等于0,就说明当前的字节是属于一个汉字的,需要把截取长度加1哦
    42             n++;
    43                }
    44         }
    45       }
    46       if(i%2==1){
    47         if(bytes[i-1]!=0){
    48           i-=1;
    49         }else{
    50           i+=1;
    51         }
    52       }
    53       return new String(bytes,0,i,"Unicode");
    54     }
    55       catch (UnsupportedEncodingException e) {
    56        LogUtils.getError().error("cut tabshops title errror", e);
    57     }
    58     return "";
    59   }
  • 相关阅读:
    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
    输入一个链表,反转链表后,输出链表的所有元素。java实现
    少一点虚荣,多一点务实
    Mysql存储引擎__笔记
    osi七层模型和两主机传输过程:
    redis_笔记
    zookeeper_笔记
    rest和soap_笔记
  • 原文地址:https://www.cnblogs.com/icoding/p/2581161.html
Copyright © 2011-2022 走看看