1 package FileDemo;
2
3 import java.io.IOException;
4
5 public class CutStringTest {
6
7 /**
8 * @param args
9 * @throws IOException
10 */
11 public static void main(String[] args) throws IOException {
12
13 String str = "ab你好cd谢谢";
14 /*byte buf[]=str.getBytes("GBK");
15 for(byte ch:buf){
16 System.out.println(Integer.toBinaryString(ch));
17 }*/
18 int len = str.getBytes("gbk").length;
19 for (int x = 0; x < len; x++) {
20 System.out.println("截取" + (x + 1) + "字节结果时:"
21 + cutStringByByte(str, x + 1));
22 }
23 String str1 = "ab你好cd杮";
24 int len1 = str.getBytes("gbk").length;
25 for (int x = 0; x < len1; x++) {
26 System.out.println("截取" + (x + 1) + "字节结果时:"
27 + cutStringByU8(str1, x + 1));
28 }
29 }
30
31 // 使用UTF-8编码表进行截取字符串,一个汉字对应三个负数,一个英文字符对应一个正数
32 private static String cutStringByU8(String str, int len) throws IOException {
33
34 byte[] buf = str.getBytes("utf-8");
35 int count = 0;
36 for (int x = len - 1; x >= 0; x--) {
37 if (buf[x] < 0) {
38 count++;
39 } else {
40 break;
41 }
42 }
43 if (count % 3 == 0) {
44 return new String(buf, 0, len, "utf-8");
45 } else if (count % 3 == 1) {
46 return new String(buf, 0, len - 1, "utf-8");
47 } else {
48 return new String(buf, 0, len - 2, "utf-8");
49 }
50 }
51
52 // 使用GBK编码表进行字符串的截取,一个英文字符对应码表一个正数,一个汉字对应两个负数
53 public static String cutStringByByte(String str, int len)
54 throws IOException {
55 byte[] buf = str.getBytes("gbk");
56 int count = 0;
57 for (int x = len - 1; x >= 0; x--) {
58 if (buf[x] < 0) {
59 count++;
60 } else {
61 break;
62 }
63 }
64 if (count % 2 == 0) {
65 return new String(buf, 0, len, "gbk");
66 } else {
67 return new String(buf, 0, len - 1, "gbk");
68 }
69 }
70
71 }