package javatraining2;
import java.util.Scanner;
import java.io.UnsupportedEncodingException;
/**
编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是
"HM"而不要出现半个中文
*/
class ShiYan1 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入内容");
String x=sc.nextLine();
Scanner s=new Scanner(System.in);
System.out.println("请输入截取位置数值");
int y=s.nextInt();
byteSubStr(x, y);
}
public static void byteSubStr(String str, int len) {
String s = null; // 初始化字符串s,赋值为空
if (str != null) // 传入的字符串不能为空
{
byte[] a = null; // 初始化字节数组,赋值为空
try {
a = str.getBytes("GBK"); // 将字符串转化为字节数组,GBK码表,此时字节数组的长度为14
} catch (UnsupportedEncodingException e) // 捕捉编码失败异常
{
e.printStackTrace();
}
// System.out.println("String length:"+a.length);打印字节数组的长度
if (a.length <= len) {
s = str; // 如果要求取出的字节长度大于字节数组应有长度,则将s初始化为str
} else if (len > 0) {
s = new String(a, 0, len); // 如果字节长度在字节数组长度范围内,则根据要求取出长度len,创建新的字符串s。
int length = s.length(); // 获取新字符串的长度
// System.out.println(s.length());
if (str.charAt(length - 1) != s.charAt(length - 1))// 如果原字符串中相应位置上的字符与
// 新字符串相应位置上的字符不相等,说明新字符串中相应位置只有半个中文,则应该讲数组指针向左移一位,形成新的子串。
{
if (length < 2) {
s = null; // 如果新字符串的长度小于2,则将新字符串赋值为空。
}
else {
s = s.substring(0, length - 1); // 将符合条件的子串复制给s
}
}
}
}
System.out.println(s);
}
}
|
|