根据指定个数,将字符串截取成相同长度的字符串(中文防止乱码)


import java.io.UnsupportedEncodingException;
import java.util.HashMap;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 有关字符串处理的类
 * @author zhb
 *
 */
public class StringUtil {

 private static final Log logger = LogFactory.getLog(StringUtil.class);
 /**
  * 截取固定大小的字符串
  * @param str
  * @param size (汉字字符)个数
  * @return map 截取结果集合
  */
 public static HashMap<Integer, String> splitString(String str,int size, HashMap<Integer, String> map) {
  if (map == null || map.size()==0) {
   map = new HashMap();
  }
  String realstring="";
  byte[] b=null;
  int count=0;
  if(getsub(str).length()>=size*2) {
   for(int i=0;i<str.length();i++) {
    b=str.substring(i,i+1).getBytes();
    if(b.length==2)
     count=count+2;
    else
     count=count+1;
    if(count==size*2) {
     realstring=upsub(getsub(str).substring(0,size*2));
     map.put(map.size(), realstring);
     splitString(upsub(getsub(str).substring(size*2)), size, map);
     break;
    } else if (count > size*2) {
     realstring=upsub(getsub(str).substring(0,size*2-1));
     map.put(map.size(), realstring);
     splitString(upsub(getsub(str).substring(size*2-1)), size, map);
     break;
    }
   }
  } else {
   realstring = str;
   map.put(map.size(), realstring);
  }
  return map;
 }

 /**
  * 编码转换
  * @param str
  * @return
  */
 public static String getsub(String str) {
  try {
   
   return new String(str.getBytes("GBK"), "ISO8859_1");
   
  } catch (UnsupportedEncodingException e) {
   
   logger.error(e.getMessage(), e);
   
   return null;
  }
 }
 
 /**
  * 编码转换
  * @param str
  * @return
  */
 public static String upsub(String str) {
  try {
   
   return new String(str.getBytes("ISO8859_1"), "GBK");
   
  } catch (UnsupportedEncodingException e) {
   
   logger.error(e.getMessage(), e);
   return null;
  }
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值