zoukankan      html  css  js  c++  java
  • String

    构造方法:也就是说,在字节和字符中,关于string的构造方法,都会转码

    /*
         * String类中的构造函数
         * String(); 构造一个空字符串对象
         * String(byte[] bytes); 通过byte数组构造字符串对象
         * String(byte[] bytes,int offset,int length);(字节数组,开始的数据,截得数据长度)
         * String(byte[] bytes, int offset, int length, Charset charset)
         * String(char[] value); 通过char数组构造字符串对象
         * String(byte[] char,int offset,int length);(字符数组,开始的数据,截得数据长度)
         * String(String original); 构造一个original的副本,拷贝一个original
         * String(StringBuffer buffer);通过StringBuffer数组构造字符串对象
         * String(StringBuilder builder)
         */
        private static void method01() {
            
            //请留意这里面的差别
            byte[] bArray = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'};
            System.out.println(new String(bArray));//打印出:abcdefgh
            byte[] byteArray = new byte[] {87, 79, 87, 97, 46, 46, 46};
            System.out.println(new String(byteArray));//打印出:WOWa...
            String strbIndex = new String(byteArray, 1, 2);
            System.out.println(strbIndex);//打印出:OW
            
            System.out.println("上面字节数组,下面字符数组");
    
            // 字符数组
            char[] cArray = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
            System.out.println(new String(cArray));//打印出:abcdefgh
            char[] cArray2 = new char[]{87, 79, 87, 97, 46, 46, 46};
            System.out.println(new String(cArray2));//注意这两种方法的区别。打印出:WOWa...
            System.out.println(String.valueOf(cArray));//注意这两种方法的区别。打印出:abcdefgh
            System.out.println(new String(cArray, 1, 2));//打印出:bc
            
            System.out.println("上面字符数组,下面StringBuffer");
            
            //声明一个StringBuffer
            StringBuffer strbuf = new StringBuffer("strbuf");
            String strbuff = new String(strbuf);
            System.out.println(strbuff);//打印出:strbuf
        }
    private static void method03() {                        
        String str01 = new String("abc");                   
        String str02 = new String("abc");                   
        String str03 = "abc";                               
        String str04 = "abc";                               
        String str05 = "a" + "bc";                          
        String str06 = "a";                                 
        String str08 = str06 + "bc";                        
        System.out.println(str08 == str04);//false          
        System.out.println(str04 == str05);//true常亮优化机制     
        System.out.println(str01 == str02);//false          
        System.out.println(str01 == str03);//false          
        System.out.println(str03 == str04);//true           
        System.out.println(str01.equals(str02));//true      
        System.out.println(str01.equals(str03));//true      
    }                                                       
    //字符串反转                                                    
    private static void method02() {                           
                                                               
        //方法一:利用方法                                             
        StringBuffer stringBuffer = new StringBuffer("123456");
        stringBuffer.reverse();                                
        System.out.println(stringBuffer.toString());           
                                                               
        //方法二:利用算法                                             
        String str = "ABCDEFG";                                
        char[] chars = str.toCharArray();                      
        char[] rev = new char[chars.length];                   
        for (int i = 0; i < chars.length -1; i++) {            
            rev[i] = chars[chars.length - 1 - i];              
        }                                                      
    //  String str2 = new String(rev);  两种字符数组转换成都可以           
        String str2 = String.valueOf(rev);                     
        System.out.println(str2);                              
                                                               
    }                                                          
    private static void method01() {                                                       
        String s = "afs123fdsa";                                                           
        //使用平台默认的字符集将此 String 解码为字节序列,并将结果存储到一个新的字节数组中。                                    
        byte[] b = s.getBytes();                                                           
        for (int i = 0; i < b.length; i++) {                                               
            byte c = b[i];                                                                 
            System.out.print(c+"、");                                                       
        }                                                                                  
        System.out.println();//打印出:97、102、115、49、50、51、102、100、115、97、                     
        String t = new String(b);//bytep[]转换为String,构造方法里面是字节数组或者字符数组,要转码                  
        System.out.println(t);//打印出:afs123fdsa                                             
    /*                                                                                                                              
     * 此应该是常识:java默认GBK编码格式                                                                                                         
     */                                                                                                                             
    private static void method03() throws UnsupportedEncodingException {                                                            
        byte[] b_default = "中".getBytes();//系统默认的编码格式。这里默认java的默认编码格式gbk                                                            
        byte[] b_gbk = "中".getBytes("GBK");//指定编码格式                                                                                 
        byte[] b_utf8 = "中".getBytes("UTF-8");                                                                                      
        byte[] b_iso88591 = "中".getBytes("ISO8859-1");                                                                              
        System.out.println(b_default.length);                                                                                       
        System.out.println(b_gbk.length);//打印出:2。通过gbk转码,一个汉字的长度是2个字节                                                               
        System.out.println(b_utf8.length);//打印出:3。通过utf-8转码,一个汉字的长度是3个字节                                                            
        System.out.println(b_iso88591.length);//打印出:2。通过iso88591转码,一个汉字的长度是1字节                                                      
                                                                                                                                    
        System.out.println("**********************");                                                                               
                                                                                                                                    
        String s_gbk = new String(b_gbk,"GBK");                                                                                     
        String s_utf8 = new String(b_utf8,"UTF-8");                                                                                 
        String s_iso88591 = new String(b_iso88591,"ISO8859-1");                                                                     
        System.out.println(s_gbk);//打印出:中。                                                                                          
        System.out.println(s_utf8);//打印出:中。                                                                                         
        System.out.println(s_iso88591);//打印出一个问号"?"。因为无法还原"中"字?原因很简单,因为ISO8859-1编码的编码表根本就不包含汉字字符,                                   
    }                                                                                                                               
    /*                                                                                             
     * 有时候,为了让中文字符适应某些特殊要求(如http header要求其内容必须为iso8859-1编码),                                       
     * 可能会通过将中文字符按照字节方式来编码的情况,如:                                                                   
     * String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1"),                          
     * 这样得到的s_iso8859-1字符串实际是三个在ISO8859-1中的字符,在将这些字符传递到目的地后,                                       
     * 目的地程序再通过相反的方式String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")           
     * 来得到正确的中文汉字"中",这样就既保证了遵守协议规定、也支持中文。                                                          
     */                                                                                            
    private static void method04() throws UnsupportedEncodingException {                           
        String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1");//用utf-8编码,用iso解码        
        String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8");//用iso解码,用utf编码       
        System.out.println(s_utf8);                                                                
    }                                                                                              

     关于compareTo方法:

    public static void main(String[] args) {                                                               
        String s1 = "abc";                                                                                 
        String s2 = "abcd";                                                                                
        String s3 = "abcdfg";                                                                              
        String s4 = "1bcdfg";                                                                              
        String s5 = "cdfg";                                                                                
        System.out.println( s1.compareTo(s2) ); // -1 (前面有相等东东,s1比s2小1个字母长度)                               
        System.out.println( s1.compareTo(s3) ); // -3 (前面有相等东东,s1比s3小3个字母长度)                               
        System.out.println( s1.compareTo(s4) ); // 48 (前面没有相等的东东,"a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)      
        System.out.println( s1.compareTo(s5) ); // -2 (前面没有相等的东东,"a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)        
    }                                                                                                      
    
    
    

    END

    END

    END

  • 相关阅读:
    2016孤独重视
    什么时候有空写一篇影评 《含泪活着》
    登录页面总结
    心跳机制
    心跳机制详解
    mysql数据库字符编码修改
    mysql20170404代码实现
    2017全面JAVA面试经历总结
    Oracle经典入门教程
    MySQL基础教程-绝对推荐
  • 原文地址:https://www.cnblogs.com/ericguoxiaofeng/p/8094023.html
Copyright © 2011-2022 走看看