黑马程序员技术交流社区
标题:
帮我看看这个程序怎么回事!
[打印本页]
作者:
lovecx24
时间:
2013-11-29 11:57
标题:
帮我看看这个程序怎么回事!
按字节截取字符串,但是不能截取半个汉字!(GBK编码)个人认为逻辑上没有问题啊,但是输出总是不对,总是把s1打印出来?
package com.lee;
import java.io.UnsupportedEncodingException;
public class TestByte {
/**
* @param args
* @throws UnsupportedEncodingException
*/
public static void main(String[] args) throws UnsupportedEncodingException {
// 定义截取字节数n
int n=6;
String s ="abcde物联网fgh";
byte[] b=s.getBytes("GBK");
byte[] b1 = new byte[n];
for(int i=0;i<n;i++){
b1[i]=b[i];
}
String s1 = new String(b1);
//判断字符串的最后一位是否出现半个汉字
if(s1.charAt(s1.length()-1)=='?'){
byte[] b2 = new byte[n+1];
for(int i=0;i<n;i++){
b2[i]=b[i];
}
String s2 = new String(b2);
System.out.print(s2);
}
System.out.print(s1);
}
}
作者:
张鹏
时间:
2013-11-29 13:42
因为'?'并不代表半个汉字,它就是一个问号字符
以下是我的思路代码
import java.io.UnsupportedEncodingException;
/*
* 以字符为单位截取,不会出现半边汉字
* 当截取的字符所构成的字符串的字节>=所要截取的长度时,停止截取
*/
public class Test {
private static String res(String s, int n)
throws UnsupportedEncodingException {
StringBuilder bud = new StringBuilder();
for (int i = 0, le = s.length(); i < le; i++) {
if (bud.toString().getBytes("GBK").length >= n) {
return bud.toString();
}
bud.append(s.charAt(i));
}
return bud.toString();
}
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "abcde物联网fgh";
for (int i = 0; i < s.length(); i++) {
System.out.printf("截取%d个字节,实际截取的字符串为::::%s\n", i, res(s, i));
}
}
}
复制代码
作者:
陪你等日出
时间:
2013-11-29 14:28
一个汉字是两个字节,字母是一个字节,如果要求是不能截取半个汉字,哥们可以这样,告诉你一个超级简单的方法:
public static void main(String[] args) {
String str = "abcde物联网fgh";
int num =6;
for (int x=0;x<num ;x++ )
{
char a = str.charAt(x);
//如果不是字母
if (a>255||a<0)
{
num--;
if (x<num)
{
System.out.println(a);
}
}
else
{
System.out.println(a);
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2