题目:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
如果是charset(gb2312, GBK, BIG5), 汉字占两个字节,问题的关键在于考虑截取长度的最后一个字节,如果是属于一个汉字的第一个字节,忽略即可,而汉字每个字节前都是1,所以都是负数,采用if(byte[i]<0)判断是否是汉字的最后一个字节。
目前看到的最好的办法:
import java.io.UnsupportedEncodingException;
public class StringSpliter {
static void fun1(String str, int length)
throws UnsupportedEncodingException {
// System.out.println(str.getBytes().length);
byte[] bt = str.getBytes("gbk");
for (int i = 0; i < bt.length; i++) {
// 打印出字节数组中的值,可以看出只要是汉字[采用GBK编码时占两个字节/UTF-8占3个字节],并且为两个负整数
// 由于字节的第一位都是1,所以它就是由负数来表示的
System.out.println(bt[i]);
}
// 打印出按实际出入的字节数的所截字符串
// System.out.println(new String(bt,0,length));
// 判断最后一个是否为负,如果是负的则丢掉该字节
if (bt[length] < 0) {
System.out.println(new String(bt, 0, --length, "gbk"));
} else {
System.out.println(new String(bt, 0, length, "gbk"));
}
}
public static void main(String[] args) {
// StringSpliter.fun1("我ABC", 4);
try {
StringSpliter.fun1("我ABC汉DEF", 7);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如: String[] arrays = new String[] { gyu, sdf, zf, 大同, 收到, 地方, 三等分, 的人, 反对高铁, 泛代数, 上的投入...
java中英文字符串截取
主要为大家详细介绍了Java截取中英文混合字符串的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这个方法用来处理java中可能有一些特别的需要,一大串中英文混合,需要中间截断或是中英中间添加一些特别的标识,调用这个方法 第一个参数是要处理的字符串,第二个是要在中英字符中间插入的字符。调用就可以得到想...
java实现含有英文字符串的符号替换为中文符号,在网上看了一些都没有详细的实现方式,看了这个就不用去摸索了,看了就会用了,下次有碰到这方面的,同样中文特殊符号转换为英文符号类似的逻辑
一个简单的demo,关于中英文排序,一个java Demo
java 判断中英文
java实现国际化中英文语言切换 java语言切换JSP国际化 java实现国际化中英文语言切换 java语言切换JSP国际化
截断中英文混合的字符串(java源程序)
利用字符间的转化把汉字转化为英文字符主要应用于提取汉字的首字母等要求
java中常用的字符串的截取方法,方便大家学习,解决自己工作中的问题。
java字符串截取 - 中英文操作系统处理字符汉字
主要介绍了Java实现字符数组全排列的方法,涉及Java针对字符数组的遍历及排序算法的实现技巧,需要的朋友可以参考下
解决截取字符串中带有汉字的问题,以防截取时汉字截取一般出现错误情况
JAVA字符串截取方法总结[文].pdf
java 字符串截取类,兼容中英文及日韩文字格式
计算字符串的真实长度(每个汉字占2个字符大小)
java 字符串截取工具类java 字符串截取工具类