关于字符串的一个问题?

laozihao 2008-05-12 10:12:34
假如有一字符String s="ABC我DEF",要按照4个字节的分法来分开这个字符串,但是遇到中文时,不是只显示一半啊(因为中文占两个字节,在输出的时候不能输出一半个我出来)
这个题目我想了好半天都没有想出来!
...全文
50 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2008-05-13
  • 打赏
  • 举报
回复
我给你一个更简单的题目

"天"

请按照一个字节的方式分开,且不能有乱码?

如果你会了,那么你的问题自己就解决了。


提示,这个是业务逻辑问题,不是技术问题。
steven_srl 2008-05-13
  • 打赏
  • 举报
回复
我觉得不会出现LZ说的什么半个中文字的现象,不知道LZ是不是程序里遇到过这种问题

java字库使用的是unicode编码,对于每一个字符都是占用16bit(中英文一样)
cursor_wang 2008-05-12
  • 打赏
  • 举报
回复
给你个代码参考吧.


public class Tools {

public static String splitString(String str, int len) {

return splitString(str, len, "...");

}

/**

* 字符串按字节截取

* @param str 原字符

* @param len 截取长度

* @param elide 省略符

* @return String

*/

public static String splitString(String str,int len,String elide) {

if (str == null) {

return "";

}

byte[] strByte = str.getBytes();

int strLen = strByte.length;

int elideLen = (elide.trim().length() == 0) ? 0 : elide.getBytes().length;

if (len >= strLen || len < 1) {

return str;

}

if (len - elideLen > 0) {

len = len - elideLen;

}

int count = 0;

for (int i = 0; i < len; i++) {

int value = (int) strByte[i];

if (value < 0) {

count++;

}

}

if (count % 2 != 0) {

len = (len == 1) ? len + 1 : len - 1;

}

return new String(strByte, 0, len) + elide.trim();

}

public static void main(String args[]){
String s="I am a student.我是一个学生";
System.out.println(Tools.splitString(s,24));
System.out.println(Tools.splitString(s,23));
System.out.println(Tools.splitString(s,25));
System.out.println(Tools.splitString(s,26));
}

}
shhr33 2008-05-12
  • 打赏
  • 举报
回复
上面发错应该是 byte[] b=="ABC我DEF".getBytes();String s=new String(x,y,z);
shhr33 2008-05-12
  • 打赏
  • 举报
回复
可以用getBytes()将字符串转换为字节数组:String s="ABC我DEF".getBytes(),LZ查查api吧,里面有的
changjiangzhibin 2008-05-12
  • 打赏
  • 举报
回复
about encode

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧