对于汉字的切分 1个 汉字 占用2个字符 不能切出半个字符
public class StringSplit { public static String split(String s, int n) { int d = n, i = 0; while (i < s.length() && (d > 1 || d == 1 && s.charAt(i) < 256)) { //判断是否为中文了,因为UINICODE规定,字母数组前8位为0,所以不可能大于256 if (s.charAt(i) < 256) d--; else d -= 2; i++; } return s.substring(0, i); } public static String split2(String s, int n) { int count = 0; for(int i = 0; i < s.length() && n>0; i++){ //遍历String if(Character.getNumericValue(s.charAt(i))>0) //如果是中文,中文/英文标点,会返回-1 n--; //是英文,消去一个字节 else n-=2; //是中文,消去二个字节 //每消去一次,代表要截取的char多了一个 //如果n<0也就是在最后只有一个字节可以消的时候,来了个中文:最后剩下1的时候又减去了2。如此就不要截取 if(n>=0) count +=1; } return s.substring(0, count); } public static void main(String[] args) { System.out.println(split("我A汉BC字D", 1)); System.out.println(split("我A汉BC字D", 2)); System.out.println(split("我A汉BC字D", 3)); System.out.println(split("我A汉BC字D", 4)); System.out.println(split("我A汉BC字D", 5)); System.out.println(split("我A汉BC字D", 12)); System.out.println(split("日产计划于2013洛杉矶车展发布一款Juke的最高性能版本车型,名为Juke NISMO RS。这款车将很快投放市场", 35)); System.out.println("---------------------------------"); System.err.println(split2("我A汉BC字D", 1)); System.err.println(split2("我A汉BC字D", 2)); System.err.println(split2("我A汉BC字D", 3)); System.err.println(split2("我A汉BC字D", 4)); System.err.println(split2("我A汉BC字D", 5)); System.err.println(split2("我A汉BC字D", 12)); System.err.println(split2("日产计划于2013洛杉矶车展发布一款Juke的最高性能版本车型,名为Juke NISMO RS。这款车将很快投放市场", 35)); //上述做法原理 //String转为byte[]后,按二进制位数来确定,8位为一个byte,而中文等一个字为16位 System.out.println("你好aa".getBytes().length); //6 //String的长度为字符数,而不论是8还是16位二进制 System.out.println("你好aa".length()); //4 //这个函数是按照String的长度来进行定位的 System.out.println("你好aa".charAt(0)); System.out.println("你好aa".charAt(1)); System.out.println("你好aa".charAt(2)); System.out.println("你好aa".charAt(3)); //中文字符转换为int值时,为-1,而标点不论中英文都为-1 System.out.println(Character.getNumericValue('a')); System.out.println(Character.getNumericValue('1')); System.out.println(Character.getNumericValue(',')); System.out.println(Character.getNumericValue('你')); System.out.println(Character.getNumericValue('好')); System.out.println(Character.getNumericValue(',')); //除去所有标点与数字,中文也是字母 System.out.println(Character.isLetter('你')); System.out.println(Character.isLetter('1')); System.out.println(Character.isLetter(',')); System.out.println(Character.isLetter('。')); System.out.println(Character.isLetter('a')); }}