用java编写一个截取字符串的函数,输入为一个字符串和字节数,输入为按照字节截取的字符串,但是要保证汉字不能被截取一半。要保证汉字完整,否则吧这个汉字舍掉。

测试代码如下:这个是用中文编码UTF-8

public class SubStringTest {
	public static void main(String[] args) throws Exception {
		String str = "aaa熊bbb123";
		int m = trimGBK(str, 5);// 调用函数
		String str2 = str.substring(0, m);
		System.out.println(str2);
	}

	// 需要判断最后一个字节是不是中文的一半 ,如果是的,就只截取String到前面一个
	public static int trimGBK(String str, int n) throws Exception {
		// 转化为byte数组,里面好像是asc码(不确定)
		byte[] bt = str.getBytes("UTF-8");// 如若这里是UTF-8,我们一个汉字就占了三个字节,
		// byte[] bt = str.getBytes("GBK");//如若这里是GBK,我们一个汉字就占了两个字节,
		System.out.println(bt.length);
		int m = n;
		if (bt[n - 1] < 0) {// 这里判断如果是小于0,就是汉族。
			m = n - 2;// 如果是UTF-8就是-2
			// m=n-1;//如果是GBK就是-1
		}
		return m;

	}

}

控制台输出如下:





下边将编码修改为GBK:

public class SubStringTest {
	public static void main(String[] args) throws Exception {
		String str = "aaa熊bbb123";
		int m = trimGBK(str, 5);// 调用函数
		String str2 = str.substring(0, m);
		System.out.println(str2);
	}

	// 需要判断最后一个字节是不是中文的一半 ,如果是的,就只截取String到前面一个
	public static int trimGBK(String str, int n) throws Exception {
		// 转化为byte数组,里面好像是asc码(不确定)
		//byte[] bt = str.getBytes("UTF-8");// 如若这里是UTF-8,我们一个汉字就占了三个字节,
		 byte[] bt = str.getBytes("GBK");//如若这里是GBK,我们一个汉字就占了两个字节,
		System.out.println(bt.length);
		int m = n;
		if (bt[n - 1] < 0) {// 这里判断如果是小于0,就是汉族。
			//m = n - 2;// 如果是UTF-8就是-2
			 m=n-1;//如果是GBK就是-1
		}
		return m;

	}

}

控制台输出如下:


猜你喜欢

转载自blog.csdn.net/handsome2013/article/details/80914555