中英文 截取固定长度显示
来源:互联网 发布:mysql utf8 中文乱码 编辑:程序博客网 时间:2024/05/16 19:47
package com.akazam.framework.core.utils;
public class StringTrimUtils {
/**
* 截取一段字符的长度(汉、日、韩文字符长度为2),不区分中英文,如果数字不正好,则少取一个字符位
*
* @param str
* 原始字符串
* @param specialCharsLength
* 截取长度(汉、日、韩文字符长度为2)
* @return
*/
public static String trim(String str, int specialCharsLength) {
if (str == null || "".equals(str) || specialCharsLength < 1) {
return "";
}
char[] chars = str.toCharArray();
int charsLength = getCharsLength(chars, specialCharsLength);
return new String(chars, 0, charsLength);
}
/**
* 获取一段字符的长度,输入长度中汉、日、韩文字符长度为2,输出长度中所有字符均长度为1
*
* @param chars
* 一段字符
* @param specialCharsLength
* 输入长度,汉、日、韩文字符长度为2
* @return 输出长度,所有字符均长度为1
*/
private static int getCharsLength(char[] chars, int specialCharsLength) {
int count = 0;
int normalCharsLength = 0;
for (int i = 0; i < chars.length; i++) {
int specialCharLength = getSpecialCharLength(chars[i]);
if (count <= specialCharsLength - specialCharLength) {
count += specialCharLength;
normalCharsLength++;
} else {
break;
}
}
return normalCharsLength;
}
/**
* 获取字符长度:汉、日、韩文字符长度为2,ASCII码等字符长度为1
*
* @param c
* 字符
* @return 字符长度
*/
private static int getSpecialCharLength(char c) {
if (isLetter(c)) {
return 1;
} else {
return 2;
}
}
public static int getSpecialCharsLength(char[] chars) {
int specialCharLength = -1;
for (int i = 0; i < chars.length; i++) {
specialCharLength += getSpecialCharLength(chars[i]);
}
return specialCharLength;
}
/**
* 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)
*
* @param char
* c, 需要判断的字符
* @return boolean, 返回true,Ascill字符
*/
private static boolean isLetter(char c) {
int k = 0x80;
return c / k == 0 ? true : false;
}
public static void main(String[] args) {
String str = "a99中国b香港c恒生dd嘿嘿呵呵地方h斯蒂芬hhh的";
str="天翼宽带WiFi客户端支持国际漫游";
str="12345678901234567890123456789012345678901234567890";
str="123天翼宽带WiFi客户端支持国际漫游123天翼宽带WiFi客户端支持国际漫游";
//str="天翼宽带客户端支持国际漫游天翼宽带客户端支持国际漫游天翼宽带客户端支持国际漫游";
System.out.println(StringTrimUtils.trim(str, 30));
//System.out.println(StringTrimUtils.trim(str, 5));
}
}
public class StringTrimUtils {
/**
* 截取一段字符的长度(汉、日、韩文字符长度为2),不区分中英文,如果数字不正好,则少取一个字符位
*
* @param str
* 原始字符串
* @param specialCharsLength
* 截取长度(汉、日、韩文字符长度为2)
* @return
*/
public static String trim(String str, int specialCharsLength) {
if (str == null || "".equals(str) || specialCharsLength < 1) {
return "";
}
char[] chars = str.toCharArray();
int charsLength = getCharsLength(chars, specialCharsLength);
return new String(chars, 0, charsLength);
}
/**
* 获取一段字符的长度,输入长度中汉、日、韩文字符长度为2,输出长度中所有字符均长度为1
*
* @param chars
* 一段字符
* @param specialCharsLength
* 输入长度,汉、日、韩文字符长度为2
* @return 输出长度,所有字符均长度为1
*/
private static int getCharsLength(char[] chars, int specialCharsLength) {
int count = 0;
int normalCharsLength = 0;
for (int i = 0; i < chars.length; i++) {
int specialCharLength = getSpecialCharLength(chars[i]);
if (count <= specialCharsLength - specialCharLength) {
count += specialCharLength;
normalCharsLength++;
} else {
break;
}
}
return normalCharsLength;
}
/**
* 获取字符长度:汉、日、韩文字符长度为2,ASCII码等字符长度为1
*
* @param c
* 字符
* @return 字符长度
*/
private static int getSpecialCharLength(char c) {
if (isLetter(c)) {
return 1;
} else {
return 2;
}
}
public static int getSpecialCharsLength(char[] chars) {
int specialCharLength = -1;
for (int i = 0; i < chars.length; i++) {
specialCharLength += getSpecialCharLength(chars[i]);
}
return specialCharLength;
}
/**
* 判断一个字符是Ascill字符还是其它字符(如汉,日,韩文字符)
*
* @param char
* c, 需要判断的字符
* @return boolean, 返回true,Ascill字符
*/
private static boolean isLetter(char c) {
int k = 0x80;
return c / k == 0 ? true : false;
}
public static void main(String[] args) {
String str = "a99中国b香港c恒生dd嘿嘿呵呵地方h斯蒂芬hhh的";
str="天翼宽带WiFi客户端支持国际漫游";
str="12345678901234567890123456789012345678901234567890";
str="123天翼宽带WiFi客户端支持国际漫游123天翼宽带WiFi客户端支持国际漫游";
//str="天翼宽带客户端支持国际漫游天翼宽带客户端支持国际漫游天翼宽带客户端支持国际漫游";
System.out.println(StringTrimUtils.trim(str, 30));
//System.out.println(StringTrimUtils.trim(str, 5));
}
}
- 中英文 截取固定长度显示
- js截取固定长度的中英文字符
- 字符串处理:中英文混排固定长度截取问题
- 中英文混排固定长度截取类库
- 字符串处理:中英文混排固定长度截取问题
- 截取中英文字符串长度
- 截取字符串使其显示为固定长度加...显示
- 解决页面截取中英文字符串长度显示不一致问题
- .net前台截取固定长度超出显示字符
- 处理中英文字符长度截取
- js截取中英文字符串长度
- CSS截取固定长度字符
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- 截取固定长度字符串显示在页面,多余部分显示为省略号(区分汉字和字符)
- ASP.net:截取固定长度字符串显示在页面,多余部分显示为省略号
- 中英文存在情况下,js截取并 显示10个长度
- js中英文字符串长度及截取问题
- 用 JSON 处理缓存
- Linux kill命令详解
- JS 收缩 展开效果
- 新浪sae上面如何上传图片(PHP)
- 裘宗燕:C/C++ 语言中的表达式求值
- 中英文 截取固定长度显示
- Apache Subversion 1.7.9正式发布
- log: Starter course
- VFW开发流程
- POJ1321
- 1001 字符自动应答器
- JS 改变图片样式
- 图形设备接口(GDI)
- JAVA中常用的排序之冒泡、选择、插入