标题:[求助]菜鸟求教String问题
只看楼主
lylrnnd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-9-8
 问题点数:0 回复次数:5 
[求助]菜鸟求教String问题

一个关于String的问题
代码如下:
byte[] buf=new byte[1024];
String userName="编程";
buf=userName.getBytes();
String a=new String(buf,0,userName.length());
JOptionPane.showMessageDialog(null,a);
显示的为"编"字..如果userName为"java" 则可正常显示;

如果代码改为
byte[] buf=new byte[1024];
String userName="编程";
buf=userName.getBytes();
JOptionPane.showMessageDialog(null,buf.toString);
则显示为若干字符.

想请教下各位大虾,为什么String转换为Byte[]后再转换回来会显示为乱码..
如果userName为中文与字母混合,如何控制userName.length(),从而使程序正常显示
userName...小弟在这先谢了.

搜索更多相关主题的帖子: String 
2007-01-16 10:34
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

那当然,buf.toString()是buf对象的String格式,它不会输出数组里面的内容
它只会输入它的hashcode形式



可惜不是你,陪我到最后
2007-01-16 10:40
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
以下是引用lylrnnd在2007-1-16 10:34:55的发言:

一个关于String的问题
代码如下:
byte[] buf=new byte[1024]; //这儿的new byte[1024]是没必要的
String userName="编程";
buf=userName.getBytes();
String a=new String(buf,0,userName.length()); //将userName.length()改成buf.length就OK了
JOptionPane.showMessageDialog(null,a);
显示的为"编"字..如果userName为"java" 则可正常

所以,正确的代码应该是这样的:


import javax.swing.*;
public class StringT{
public static void main(String[] args){
byte[] buf =null;
String str =\"编程\";
buf =str.getBytes();
String nStr =new String(buf,0,buf.length); //事实上,用new String(buf)就OK了
JOptionPane.showMessageDialog(null,nStr);
}
}


My BlogClick Me
2007-01-16 11:40
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
得分:0 
至于为什么是这样,你可以去看一些关于字符编码方面的东西.
这儿稍微讲一下:Java内部使用的Unicode编码,每个字符用一个char表示(JDK1.5后采用UTF16编码,可能是两个char了).
而getBytes()方法返回的是用平台默认的字符集(在windows下应该是GB2312,这种编码一个英文,数字是用一个byte表示,而汉字或其他亚洲字符是用两个byte表示).
所以,对于一个String str;
如果str里面全是英文或数字,那么应该有str.length()==str.getBytes().length
否则,一般应该有str.length()<str.getBytes().length

My BlogClick Me
2007-01-16 11:54
gantz
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-28
得分:0 
Eastsun 讲的不错
2007-01-16 12:49
lylrnnd
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2006-9-8
得分:0 
呵呵 知道了 谢谢楼上的几位大哥了
2007-01-16 15:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-116226-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.126615 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved