站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题求教一道简单的编程题

求教一道简单的编程题

摘要: 求教一道简单的编程题



编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节数截取的字符串,介理要保证汉字不被截半个,如"我ABC" 4,应该截为"我AB",输入为"我ABC汉DEF" 6,应该输出为"我ABC",而不是"我ABC+汉的半个";


String str = "...";
byte[] bytes = str.getBytes("GBK");
然后把bytes数组进行分割,假如第i到第j个(不包括第j个)为一段
String sSec = new String(bytes, i, j-i, "GBK");

分割时注意,汉字的高字节为负数,其他均为正数,根据这个特点进行分割,就不会把汉字分成两个字节


问题都不太对哦
据我所知,java用的unicode,英语字母和汉字的长度是一样的,都是两个字节,难道在字符串里面又不是了?




没想到好的方法,

因为,这个涉及到编码问题,
如果使用GB2313的话一个汉字会是2个字节,
而使用UTF-8的话,将不会是2个字节。

如果有其他语言的文字的话,更麻烦。。。。


比较傻的方法

public static String getWord(String word, int n) {
if (word.getBytes().length <= n) {
return word;
}
if (word.getBytes()[n] < 0) {
for (int i = word.length(); i > 0; i--) {
String tempWord = word.substring(0, i);
if (word.substring(0, i).getBytes().length <= n) {
return tempWord;
}
}
}
return "";
}



错了,重发
public static String getWord(String word, int n) {
if (word.getBytes().length <= n) {
return word;
}
for (int i = word.length(); i > 0; i--) {
String tempWord = word.substring(0, i);
if (word.substring(0, i).getBytes().length <= n) {
return tempWord;
}
}
return "";
}


public String SplitString(String str, int length){
if(length >= str.getBytes().length)
return str;
int x = 0;
int y = 0;
for(int i=0;iif(str.charAt(i)>255)
x += 2;
else
x += 1;
y += 1;
if(x == length){
return (str.substring(0, y));
}
if(x > length){
return (str.substring(0, y - 1));
}
}
return "";
}


其实这个问题很简单,在JAVA中,中文和英文一样,都只占一个字节的空间。就以你的“我ABC汉DEF”为例:
class Length{
public static void main(String[] args){
String s="我ABC汉DEF";
String str1=s.substring(0,1);
String str2=s.substring(1,4);
String str3=s.substring(4,5);
String str4=s.substring(5,8);

System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(str4);
}
}

这样写就可以正确输出想要的结果咯!!!
楼主赶快给分吧,谢谢了!!


楼上的答案真有意思啊


经测试,s3x4和melas的代码都是正确的,送分(:


↑返回目录
前一篇: 在JAVA里处理中文的能力就那么烂?
后一篇: [新手问题] 关于equals方法