当前位置: 代码迷 >> Java相关 >> [求助]菜鸟求教String问题
  详细解决方案

[求助]菜鸟求教String问题

热度:239   发布时间:2007-01-16 10:34:55.0
[求助]菜鸟求教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  

----------------解决方案--------------------------------------------------------

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



----------------解决方案--------------------------------------------------------
以下是引用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);
}
}


----------------解决方案--------------------------------------------------------
至于为什么是这样,你可以去看一些关于字符编码方面的东西.
这儿稍微讲一下: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
----------------解决方案--------------------------------------------------------
Eastsun 讲的不错
----------------解决方案--------------------------------------------------------
呵呵 知道了 谢谢楼上的几位大哥了
----------------解决方案--------------------------------------------------------
  相关解决方案