技巧辅导:长字符串按指定长度截取
来源:优易学  2011-11-29 13:24:54   【优易学:中国教育考试门户网】   资料下载   IT书店
  在web开发中,会遇到这样一个问题,想让某个内容全部保持在一定长度范围内,未超出的行全部显示,超长的行只允许显示一定的长度,结尾用省略号代替。
  粗想一下,实现这个功能很容易,直接取字符串的长度(用length()方法),如果超出,就用substring()方法截取一段,然后再在结尾处加上省略号。但实际上这样做是不行的,至少说是某种程度上得不到我们想要的结果,因为一个英文字母和一个汉字用lenth方法得到的值都是1,这不错,但是在显示时,一个汉字占两个字母的位置,这样即使我们截取了指定长度的字符串,但实际显示起来是参差不齐的。下面是我对这个问题给出的解决方案。
  /**
  * @(#)StringUtil.java
  *
  *
  * @author Examda
  *
  */
  public class StringUtil{
  public StringUtil() {
  }
  public static void main(String[] args){
  String str="12345 英afa五左,大有枝节一碟sd.sdfas 2008-11-22";
  System.out.println(StringUtil.omitString(str,30));
  str="12345 英afa五左,大有枝节s一碟sd.sdfas 2008-11-22";
  System.out.println(StringUtil.omitString(str,30));
  str="12345 英afa五左,大有枝节a";
  System.out.println(StringUtil.omitString(str,30));
  str="12345 英afa五左,大有枝节基";
  System.out.println(StringUtil.omitString(str,30));
  }
  /*
  * 计算字符串的字节长度(字母数字计1,汉字及标点计2)
  *
  */
  public static int byteLength(String string){
  int count = 0;
  for(int i=0;i<string.length();i++){
  if(Integer.toHexString(string.charAt(i)).length()==4){
  count += 2;
  }else{
  count++;
  }
  }
  return count;
  }
  /*
  * 按指定长度,省略字符串部分字符
  * @para String 字符串
  * @para length 保留字符串长度
  * @return 省略后的字符串
  */
  public static String omitString(String string,int length){
  StringBuffer sb = new StringBuffer();
  if(byteLength(string)>length){
  int count = 0;
  for(int i=0;i<string.length();i++){
  char temp = string.charAt(i);
  if(Integer.toHexString(temp).length()==4){
  count += 2;
  }else{
  count++;
  }
  if(count<length-3){
  sb.append(temp);
  }
  if(count==length-3){
  sb.append(temp);
  break;
  }
  if(count>length-3){
  sb.append(" ");
  break;
  }
  }
  sb.append("...");
  }else{
  sb.append(string);
  }
  return sb.toString();
  }
  }
  执行结果是:
  12345 英afa五左,大有枝节一...
  12345 英afa五左,大有枝节s ...
  12345 英afa五左,大有枝节a
  12345 英afa五左,大有枝节基

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训