发开项目需要,在网上找了很久都没有打到.于是自己动手写了一下.贡献出来给有需要的人.如果有什么问题可以加我MSN:[email protected] 讨论讨论
源代码:
/**
* 截取字符串的前targetCount个字符
* @param str 被处理字符串
* @param targetCount 截取长度
* @version 1.1
* @author Strong Yuan
* @return String
*/
public static String subContentStringOrialBytes(String str,int targetCount){
return subContentStringOrialBytes(str,targetCount,”…”);
}
/**
* 获取指定长度字符串的字节长
* @param str 被处理字符串
* @param maxlength 截取长度
* @author Strong Yuan
* @version 1.1
* @return String
*/
private static long getStringByteLength(String str,int maxlength){
if(str==null)
return 0;
int tmp_len = maxlength;
if(str.length()<maxlength)
tmp_len = str.length();
else if(str.length()>maxlength*2)
tmp_len = maxlength*2;
char[] tempchar = str.substring(0, tmp_len).toCharArray();
int intVariable = 0;
String s1 = null;
for(int i=0;i<tempchar.length && intVariable<=maxlength;i++){
s1 = String.valueOf(tempchar[i]);
intVariable += s1.getBytes().length;
}
s1= null;
tempchar = null;
return intVariable;
}
/**
* 截取指定长度的字符串,基于bytes,即是中文的长度为2,英文为1
* @param str 被处理字符串
* @param targetCount 截取长度
* @param more 后缀字符串
* @author Strong Yuan
* @version 1.1
* @return
*/
public static String subContentStringOrialBytes(String str, int targetCount,String more)
{
if (str == null)
return “”;
int initVariable = 0;
StringBuffer restr = new StringBuffer();
if (getStringByteLength(str,targetCount) <= targetCount)
return str;
String s1=null;
byte[] b;
char[] tempchar = str.toCharArray();
for (int i = 0; (i < tempchar.length && targetCount > initVariable); i++) {
s1 = String.valueOf(tempchar[i]);
b = s1.getBytes();
initVariable += b.length;
restr.append(tempchar[i]);
}
if (targetCount == initVariable || (targetCount == initVariable – 1)) {
restr.append(more);
}
return restr.toString();
}
/**
* 截取指定长度的字符串,存在问题,但效率会高一点点.just a little
* @param str 被处理字符串
* @param targetCount 截取长度
* @param more 后缀字符串
* @version 1.1
* @author Strong Yuan
* @return String
*/
public static String subContentStringOrial(String str,int targetCount){
return subContentStringOrial(str,targetCount,”…”);
}
/**
* 截取指定长度的字符串,存在问题,但效率会高一点点.just a little
* @param str 被处理字符串
* @param targetCount 截取长度
* @param more 后缀字符串
* @author Strong Yuan
* @return String
*/
public static String subContentStringOrial(String str, int targetCount,String more)
{
if (str == null)
return “”;
int initVariable = 0;
StringBuffer restr = new StringBuffer();
if (str.length() <= targetCount)
return str;
String s1=null;
byte[] b;
char[] tempchar = str.toCharArray();
for (int i = 0; (i < tempchar.length && targetCount > initVariable); i++) {
s1 = String.valueOf(tempchar[i]);
b = s1.getBytes();
initVariable += b.length;
restr.append(tempchar[i]);
}
if (targetCount == initVariable || (targetCount == initVariable – 1)) {
restr.append(more);
}
return restr.toString();
}
String str =”当奥运圣火格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节格式化字符串长度,超出部分显示省略号,区分汉字跟字母。汉字2个字节,字母数字一个字节”;
String aa = null;
for(int i =0;i<=100000;i++){
aa = htmlFilter.subContentStringOrial(str, maxLength);
}
System.out.println(“结果: “+aa);
System.out.println(“耗时: ” + (System.currentTimeMillis()-curr)+” ms”);
curr = System.currentTimeMillis();
for(int i =0;i<=100000;i++){
aa = htmlFilter.subContentStringOrialBytes(str, maxLength);
}
System.out.println(“结果: “+aa);
System.out.println(“耗时: ” + (System.currentTimeMillis()-curr)+” ms”);
System.out.println(htmlFilter.subContentStringOrialBytes(“[原创]山西临汾矿难3主犯被判无期dfasdfasdfasdf万人听判”, maxLength,”…”));
//存在问题,当str.length()小于maxLength时,就不进行截取
System.out.println(htmlFilter.subContentStringOrial(“[原创]山西临汾矿难3主犯被判无期万人听判”, maxLength));
System.out.println(htmlFilter.subContentStringOrialBytes(“[原创]山西临汾矿难3主犯被判无期万人听判”, maxLength,”…”));
耗时: 1183 ms
结果: 当奥运圣火格式化字符
耗时: 1834 ms
[原创]dfasdfasdfasdf
[原创]dfasdfasdfasdf
[原创]山西临汾矿难3主
[原创]山西临汾矿难3主
[原创]山西临汾矿难3主犯被判无期万人听判判无期万人听判
[原创]山西临汾矿难3主