A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘士林 中级黑马   /  2012-11-3 10:42  /  1489 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
  
  String  str = "deh哈哈";
  
  byte[] bt = str.getBytes();
  
  str=new String(bt,0,4);
  
  System.out.println(str);
  
  System.out.println(str.length());
  
  char ch = str.charAt(3);
  
  System.out.println(ch);
  
  System.out.println(str.contains("?"));
}
输出结果:
deh?
4
?
false
按指定字节数截取字符串,并打印出结果。我不明白的是为什么打印子串里面有?存在,字符串长度是4
用chatAt方法取出3号角标位的字符也是?,用contains方法判断是否包含的d,e,h时都是true,而判断?时则返回false,
根据前面的内容能得出?明明存在于字符串中,为什么会返回false?不得其解,望高手指点。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

3 个回复

倒序浏览
因为你的 str字符串使用的是UTF-8编码表,而你调用str.getBytes()方法时使用的是平台默认的编码表,也就是gbk编码表,所以你在使用str.getBytes()方法时,获取的byte字节是乱码,而乱码在eclipse上就显示成了?,而你后面在用contains方法判断?是否包含在str里时,因为?使用的是gbk编码表查询出来的结果,所以自然和你str字符串的字符不相同.因此显示flase.

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
黑马_宋超 发表于 2012-11-3 11:37
因为你的 str字符串使用的是UTF-8编码表,而你调用str.getBytes()方法时使用的是平台默认的编码表,也就是gbk ...

那d,e,h 也应该是用gbk编码表查的,它们为什么返回true?
回复 使用道具 举报
刘士林 发表于 2012-11-3 11:56
那d,e,h 也应该是用gbk编码表查的,它们为什么返回true?

因为d,e,h这三个字母在gbk编码表和UTF-8编码表种的编码是一样的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马