zoukankan      html  css  js  c++  java
  • 若是汉字的一半,就舍弃这个汉字输出,例如:“js3范ad啊asd”,截取4,则输出:“js3”

    package com.jt.test.redis;
    
    import org.junit.Test;
    
    /* 题目要求
     * 编码:GBK,一个英文字符占一个字节,一个汉字占2个字节
     * 随机给定一个字符串,例如:js3范ad啊asd
     * 随机给定一个数字为截取字符串的长度,例如:6
     * 根据给定的数字截取字符串,结果:js3范a
     * 如果给定截取长度最后一个字符是英文,就直接截取,如上面的例子
     * 如果给定截取长度最后一个是汉字,
     * 若正好截取整个汉字,就直接输出,例如:“js3范ad啊asd”,截取5,则输出:“js3范”
     * 若是汉字的一半,就舍弃这个汉字输出,例如:“js3范ad啊asd”,截取4,则输出:“js3”
     */
    public class test {
        
        /* 我知道问题的答案,有一个点不明白,
         * 现在的问题是不明白为什么 c==arr[3] 输出结果是false
         * 一开始认为是 == 造成的地址问题
         * 现在认为是byte转int造成的转码问题
         */
        @Test
        public void test() throws Exception {
            
            String str="js3范ad啊asd";
        
            byte[] arr = str.getBytes("GBK");
            
            // 变量里面存的都是补码
            // byte: arr[3] 1011 1010
            // 转成int:   1111 1111 1111 1111 1111 1111 1011 1010
            // 强转char:1111 1111 1011 1010
            char c=(char) arr[3]; 
            System.out.println(c);
            System.out.println((int)c);    // 65463      源码:1111 1111  1011 1010
            
            System.out.println(arr[3]);    // -73       源码:1100 0101    
            // false,  比较的时候都转成int类型
            // c        :char转为int: 0000 0000 0000 0000 1111 1111 1011 1010
            // arr[3]: byte转为int: 1111 1111 1111 1111 1111 1111 1011 1010
            // 所以是false
            System.out.println(c==arr[3]);         // 所以是false
            
            
            System.out.println();
            
            // 下面都明白
            char d=(char) arr[1];
            System.out.println((int)d);
            System.out.println(d);
            System.out.println(arr[1]);
            System.out.println(d==arr[1]); // true
            
        }
    }
  • 相关阅读:
    svn命令行使用积累
    linux下编译出现tmp空间不足解决办法
    secure CRT the remote system refused the connection 解决办法
    Makefile 中符合的使用
    函数指针作为某个函数的参数及定义函数指针(回调函数)
    C语言指针变量作为函数参数
    虚拟机下安装ubuntu后root密码登录失败的问题
    管理者需要知道的十大经典理论
    System V 与 POSIX
    带你吃透RTMP
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9960868.html
Copyright © 2011-2022 走看看