黑马程序员技术交流社区
标题:
关于基础测试遇到的问题
[打印本页]
作者:
黑马不黑
时间:
2013-12-4 22:16
标题:
关于基础测试遇到的问题
本帖最后由 黑马不黑 于 2013-12-5 08:32 编辑
题目:从“HM程序员训练营”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文。为什么设置不同的截取长度,结果中的字符串末尾会出现“?”
我的代码实现如下:
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);
}
复制代码
作者:
HAnG
时间:
2013-12-4 22:42
给你参考下我写的:
public static String cutString(String str, int len) {
//定义一个子串,用于存储最后结果。
String substr = null;
if(str != null) {
byte[] by = null;
//使用GBK码表将源字符串编码成byte序列,并存储到数组by中。需要捕捉异常
try {
by = str.getBytes("GBK");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//如果需要截取的字节数大于等于源字符串的字节数,直接返回整个源字符串
if(len >= by.length)
return str;
//按需要截取的字节数截取一段字符串
substr = new String(by, 0, len);
//如果该字符串不是源字符串的子串,说明出现了半个中文的情况,舍弃最后一个字节
if(!str.contains(substr))
substr = new String(by, 0, len-1);
}
return substr;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2