在项目中,经常显示时候要截取字符.一直用的是substring这个方法,由于汉字和字符截取时候默认长度一样,造成有时侯截显示长度不一样.后来根据字符来截取,下面是使用的代码
import java.io.UnsupportedEncodingException;public class CutString { /** * 判断是否是一个中文汉字 * * @param c * 字符 * @return true表示是中文汉字,false表示是英文字母 * @throws UnsupportedEncodingException * 使用了JAVA不支持的编码格式 */ public static boolean isChineseChar(char c) throws UnsupportedEncodingException { // 如果字节数大于1,是汉字,以这种方式区别英文字母和中文汉字并不是十分严谨 return String.valueOf(c).getBytes("GBK").length > 1; } /** * 按字节截取字符串 * * @param orignal * 原始字符串 * @param count * 截取位数 * @return 截取后的字符串 * @throws UnsupportedEncodingException * 使用了JAVA不支持的编码格式 */ public static String substring(String orignal, int count) throws UnsupportedEncodingException { // 原始字符不为null,也不是空字符串 if (orignal != null && !"".equals(orignal)) { // 将原始字符串转换为GBK编码格式 orignal = new String(orignal.getBytes(), "GBK"); // 要截取的字节数大于0,且小于原始字符串的字节数 if (count > 0 && count < orignal.getBytes("GBK").length-2) { StringBuffer buff = new StringBuffer(); char c; for (int i = 0; i < count; i++) { c = orignal.charAt(i); buff.append(c); if (CutString.isChineseChar(c)) { // 遇到中文汉字,截取字节总数减1 --count; } } buff.append(".."); return buff.toString(); } } return orignal; }
/** * 测试方法* / public static void main(String[] args) { } }}