转自:http://topic.youkuaiyun.com/u/20101013/21/635d6d03-558e-42e9-a535-f74de6bd0033.html?r=69123088
//GBK
public static String cutString(String str,int length) throws Exception{
int count=0,i=0;
for(;i<length&&count<length;i++,count++){
if(String.valueOf(str.charAt(i)).matches("[^//x00-//xff]")){
count++;
}
}
return new String(str.toCharArray(),0,i);
}
//UTF-8
*截取前n个字符的简单实现。Java中使用代码点表示通常意义的字符,即获取前n个代码点。
*/
static String getTopNCodePoint(String str, int n) {
StringReader sr = new StringReader(str);
StringBuffer dist = new StringBuffer();
// 代码点数量
int count = 0;
// 读入的代码单元
int ch = 0;
try {
while (count < n && (ch = sr.read()) != -1) {
char a = (char) ch;
dist.append(a);
// 大部分常见汉字都可用一个char表示
// 通常情况下,代码单元分三种:普通、高代理、低代理
// 具体参考UTF-16规范 http://tools.ietf.org/html/rfc2781
if (Character.isHighSurrogate(a)) {
// 如果此代码点为高代理,则紧接的代码单元是低代理,将后一个代码单元直接读入,不再处理。
dist.append((char) sr.read());
}
count++;
}
} catch (IOException e) {
e.printStackTrace();
}
return dist.toString();
}
截断中文
最新推荐文章于 2025-08-08 22:01:10 发布