黑马程序员技术交流社区
标题:
测试题最后一道
[打印本页]
作者:
夜hen冷
时间:
2014-11-14 18:45
标题:
测试题最后一道
编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
作者:
zhangyangLengen
时间:
2014-11-14 18:53
一般GBK的编码汉字是两个字节,都为负数;
首先将获取字节数组,对字节数组进行循环,然后还要对循环中的元素字节,还要往前循环,如果字节值为负数,那么继续往前,如果为整数就停止,最终如果字节为负数出现的次数为偶数,那么就字节就取到这,如果为奇数就不取。
作者:
zhangyangLengen
时间:
2014-11-14 18:55
还有GBK的编码汉字是两个字节,一负一正
作者:
(づ ̄_3 ̄)づ
时间:
2014-11-14 19:14
public class Test {
public static void main(String[] args) {
String str = "HM程序员";
byte[] bytes = str.getBytes();
byte[] result = new byte[bytes.length];
// 要截取的长度
int len = 3;
for (int i = 0; i < len; i++) {
if (bytes[i] > 0) {// 为字母
result[i] = bytes[i];
} else if (bytes[i] < 0 && i + 1 < len) {// 为汉字的第一个字符且后一个字符还在要取的范围内
result[i] = bytes[i];
result[i + 1] = bytes[i + 1];
i++;
}
}
System.out.println(new String(result));
}
}
复制代码
作者:
时间都去哪了
时间:
2014-11-15 21:55
进来看看,学习学习
作者:
扫地僧wu
时间:
2014-11-16 17:22
(づ ̄_3 ̄)づ 发表于 2014-11-14 19:14
基础测试最后一题都一样啊
作者:
Afridoce
时间:
2014-11-16 18:05
我是来学习的
作者:
想成为黑马
时间:
2014-11-16 20:16
表示鸭梨山大
作者:
郑泽霖
时间:
2014-11-17 14:57
public class Test {
public static void main(String[] args) {
String str = "HM程序员";
byte[] bytes = str.getBytes();
byte[] result = new byte[bytes.length];
// 要截取的长度
int len = 3;
for (int i = 0; i < len; i++) {
if (bytes[i] > 0) {// 为字母
result[i] = bytes[i];
} else if (bytes[i] < 0 && i + 1 < len) {// 为汉字的第一个字符且后一个字符还在要取的范围内
result[i] = bytes[i];
result[i + 1] = bytes[i + 1];
i++;
}
}
System.out.println(new String(result));
}
}
作者:
孟育俊
时间:
2014-11-17 17:08
恩,学习了
作者:
touch_world
时间:
2014-11-17 20:23
新技能get了一个
作者:
范中俊
时间:
2014-11-17 22:30
学习一下
作者:
范中俊
时间:
2014-11-17 22:31
学习一下
作者:
kakasa
时间:
2014-11-18 12:01
public static void main(String[] args) throws UnsupportedEncodingException
{
String str="HM程序员";
split(str,7);
}
public static void split(String str,int len) throws UnsupportedEncodingException
{
byte[] buf=str.getBytes("gbk");
System.out.println(Arrays.toString(buf));
for(int x=0;x<len;x++)
{
if(buf[x]>0)//大于0的英文字母直接打印。
System.out.print((char)buf[x]);
else
{
if(x+1<len)//汉字由两个字节组成,所以判断x+1后是否小于len,如果是就把x,x+1当作两个字节打印,否则break;退出。
{
String temp=new String(new byte[]{buf[x],buf[x+1]},"gbk");
System.out.print(temp);
x=x+1;
}
else break;
}
}
}
复制代码
作者:
天天小志
时间:
2014-11-18 12:10
学习学习
作者:
kerner
时间:
2014-11-18 14:25
public class CutByteCode {
public static void main(String[] args) throws IOException {
String test = "ww琲琲你好lifang才";
int len = test.getBytes().length;
for(int i = 0 ; i < len; i++)
System.out.println("截取第"+(i+1)+"字节结果是:"+cutByteMethod(test, i+1, "gbk"));
}
public static String cutByteMethod
(String name,
int len,
String encode) throws IOException {
byte[] buf = name.getBytes(Charset.forName(code));
boolean flag = false;
for(int i = 0; i < len; i++) {
if(buf[i] < 0) {
flag = !flag;
if(flag&&buf[i+1]>0)
flag = true;
}
else
flag = false;
}
if(flag)
return new String(buf, 0, len-1,code);
else
return new String(buf, 0, len, code);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2