截取字符串 考虑汉字情况

package com.newcore.pcms.util;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * <p>Title: ReservedDecimal</p>
 * <p>Description: </p>
 * @author  MaRuifu
 * @date    2017年1月9日下午10:27:55
 */
public class StringTools {

    private static Logger logger = LoggerFactory.getLogger(StringTools.class);

    /**
     * 按照字节截取字符串,如果最后一位截取在汉字中则向前一位
     * <p>Title: subStringByByte</p>
     * <p>Description: 字节截取</p>
     * @param str 所被截取的字符串
     * @param len  截取字符串的字节长度
     * @return
     */

    public static String subStringByByte(String str, int subSLength){ 
        if(subSLength<=0){
            return ""; 
        }else if (str == null)    
            return null;    
        else{   
            int tempSubLength = subSLength;//截取字节数  
            String subStr = str.substring(0, str.length()<subSLength ? str.length() : subSLength);//截取的子串    
            int subStrByetsL=0;
            try {
                //截取子串的字节长度   
                 subStrByetsL = subStr.getBytes("GBK").length;
            } catch (Exception e) {
                logger.error(e.getMessage(), e);
            }
                 // 说明截取的字符串中包含有汉字    
                while (subStrByetsL > tempSubLength){    
                    int subSLengthTemp = --subSLength;  
                    subStr = str.substring(0, subSLengthTemp>str.length() ? str.length() : subSLengthTemp);  
                    try {
                    subStrByetsL = subStr.getBytes("GBK").length;  
                    } catch (Exception e) {
                        logger.error(e.getMessage(), e);
                    }
               }    


            return subStr;   
        }  
    } 
    /**
     * 返回字节的长度
     * <p>Title: retStringByByte</p>
     * <p>Description: </p>
     * @param str
     * @return
     */
    public static int retStringByByte(String str) {
        if(str==null){
            return 0;
        }
        int a = 0;
        try {
            a = str.getBytes("GBK").length;
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
        return a;
    }


    /**
     * 
     * <p>Title: retStringlistByByte</p>
     * <p>Description: </p>
     * @param str
     * @return
     * 
     */
    public static List<String> retStringlistByByte(String str,int len) {
        List<String> list = new  ArrayList<String>();

        if(StringTools.retStringByByte(str)<=len){
              list.add(str);
          }else{
              String send = str;
                for (int i = 0; i < 1;) {
                    list.add(subStringByByte(send,len));
                     send =  retStringByte(send, len);
                    if("".equals(send)){
                        break;
                    }
                }

          } 
        return list;
    }



    /**
     * 返回截取之后的字符串
     * <p>Title: retStringByte</p>
     * <p>Description: </p>
     * @param str
     * @param len
     * @return
     */
    public static String retStringByte(String str,int len) {
        String sendWord=str;
        int substr = StringTools.subStringByByte(sendWord, len).length();
        sendWord=sendWord.substring(substr, sendWord.length());
        return sendWord;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值