package a.b.c; /** * 半角、全角文字處理工具類 * */ public class DbcSbcUtils { /** * 半角、全角字符判斷 * * @param c * 字符 * @return true:半角; false:全角 */ public static boolean isDbcCase(char c) { // 基本拉丁字母(即鍵盤上可見的,空格、數字、字母、符號) if (c >= 32 && c <= 127) { return true; } // 日文半角片假名和符號 else if (c >= 65377 && c <= 65439) { return true; } return false; } /** * 字符串長度取得(區分半角、全角) * * @param str * 字符串 * @return 字符串長度 */ public static int getLength(String str) { int len = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (isDbcCase(c)) { // 半角 len = len + 1; } else { // 全角 len = len + 2; } } System.out.println("#### LEN ="+len); return len; } /** * 字符串截取(區分半角、全角) * * @param str * 字符串 * @param limit * 長度 * @return */ public static String getPatStr(String str, int limit) { if (getLength(str) <= limit) { return str; } // limit = limit - 4; char[] chars = str.toCharArray(); int charLenSum = 0; String result = ""; for (int i = 0; i < chars.length; i++) { int charLen = isDbcCase(chars[i]) ? 1 : 2; if (charLenSum + charLen > limit) { return result + "..."; } charLenSum += charLen; result += chars[i]; if (charLenSum == limit) { return result + "..."; } } return ""; } public static void main(String[] args) { System.out.println(getPatStr("全角文字", 10)); System.out.println(getPatStr("全角文字判", 10)); System.out.println(getPatStr("全角文字12", 10)); System.out.println(getPatStr("全角文字123", 10)); System.out.println(getPatStr("12345678901234567890", 14)); System.out.println(getPatStr("一二三四五六七八九十", 14)); } }