zoukankan      html  css  js  c++  java
  • JAVA识别字符串是数字(英文)还是汉字,web页面进行字符截断的帮助类

    public static void main(String[] args) {
        //长度是2说明是英文/数字/英文状态下的字符,长度为4说明是汉字/中文状态下的字符
        String str = "测试2s-+¥2#";
        for(int i=0; i<str.length(); i++){
            System.out.println("[" + str.charAt(i) + "]的长度为:" + Integer.toHexString(str.charAt(i)).length());
        }
    }

    运行结果:

    [测]的长度为:4
    [试]的长度为:4
    [2]的长度为:2
    [s]的长度为:2
    [-]的长度为:2
    [+]的长度为:2
    [¥]的长度为:4
    [2]的长度为:2
    [#]的长度为:2

    针对这个原理可以解决页面上有固定宽度的显示区域,但显示区域的内容超长并且有中英文混合,需要进行截断显示(其实也可以采用css处理,但是有些地方css处理会有兼容性的问题)。

    特写如下帮助类:

      1 /*  3  * Author:   yangzhilong
      4  * Date:     2016年8月25日 下午1:44:36
      5  * Description: //模块目的、功能描述      
      6  * History: //修改记录
      7  * <author>      <time>      <version>    <desc>
      8  * 修改人姓名             修改时间            版本号                  描述
      9  */
     10 import org.apache.commons.lang3.StringUtils;
     11 
     12 /**
     13  * 〈一句话功能简述〉<br> 
     14  * 〈功能详细描述〉
     15  *
     16  * @author yangzhilong
     17  * @see [相关类/方法](可选)
     18  * @since [产品/模块版本] (可选)
     19  */
     20 public class StringSubstringUtils {
     21     
     22     private static enum MODEL{UP, DOWN};
     23 
     24     /**
     25      * 功能描述: <br>
     26      * 〈功能详细描述〉
     27      *
     28      * @param args
     29      * @throws Exception 
     30      * @see [相关类/方法](可选)
     31      * @since [产品/模块版本](可选)
     32      */
     33     public static void main(String[] args) throws Exception {
     34         String str = "测试哈2哈ek";
     35         //4个汉字的宽度
     36         System.out.println(substrByByteLength(str, 16, MODEL.DOWN));
     37         //4个汉字的宽度
     38         System.out.println(substrByByteLength(str, 16, MODEL.UP));
     39         
     40         //4个汉字加一个英文的宽度
     41         System.out.println(substrByByteLength(str, 18, MODEL.DOWN));
     42         //4个汉字加一个英文的宽度
     43         System.out.println(substrByByteLength(str, 18, MODEL.UP));
     44         
     45         //5个汉字的宽度
     46         System.out.println(substrByByteLength(str, 20, MODEL.DOWN));
     47         //5个汉字的宽度
     48         System.out.println(substrByByteLength(str, 20, MODEL.UP));
     49     }
     50     
     51     /**
     52      * 
     53      * 功能描述: <br>
     54      * 截图字符串的指定字节长度
     55      *
     56      * @param str
     57      * @param length  字节长度,必须为2的整数倍
     58      * @param model  截取模式,例如截图的地方是一个汉字(4个长度),是保留这个汉字还是不要,UP为保留,DOWN为不保留
     59      * @return
     60      * @throws Exception
     61      * @see [相关类/方法](可选)
     62      * @since [产品/模块版本](可选)
     63      */
     64     public static String substrByByteLength(String str, int length, MODEL model) throws Exception{
     65         if(StringUtils.isBlank(str)){
     66             return str;
     67         }
     68         if(length <=0){
     69             throw new RuntimeException("length必须大于0");
     70         }
     71         if(length%2 != 0){
     72             throw new RuntimeException("length必须是2的整数倍");
     73         }
     74         int tempLengthCount = 0;
     75         for(int i=0,len=str.length(); i<len; i++){
     76             tempLengthCount += Integer.toHexString(str.charAt(i)).length();
     77             if(tempLengthCount>=length){
     78                 if(tempLengthCount > length){
     79                     switch (model) {
     80                         case UP:
     81                             if(i < (len-1)){
     82                                 return str.substring(0, i+1) + "..";
     83                             }else{
     84                                 return str.substring(0, i+1);
     85                             }
     86                         case DOWN:
     87                             if(i <= (len-1))
     88                                 return str.substring(0, i) + "..";
     89                             else
     90                                 return str.substring(0, i);
     91                     }
     92                 }else{
     93                     if(i < (len-1)){
     94                         return str.substring(0, i+1) + "..";
     95                     }else{
     96                         return str.substring(0, i+1);
     97                     }
     98                 }
     99             }
    100         }        
    101         return str;
    102     }
    103 }

    运行结果如下:

    测试哈2..
    测试哈2哈..
    测试哈2哈..
    测试哈2哈..
    测试哈2哈e..
    测试哈2哈e..
  • 相关阅读:
    几个不错的学习网址不断更新中
    重构之美-跨越Web标准,触碰语义网[分离:通用也许是个美丽陷阱]
    在APP中分享小程序和在企微中分享小程序到对话聊天框需要做哪些配置
    第三方平台授权小程序遇到的问题
    第三方授权小程序,将小程序代码推到第三方平台流程以及需要配置哪些东西
    html5专题页
    lua字符串格式化多参用法
    lua三目运算符逻辑盲点
    部分数学符号
    常用软件链接
  • 原文地址:https://www.cnblogs.com/yangzhilong/p/5806507.html
Copyright © 2011-2022 走看看