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

posted @ 2017-12-23 17:54  天马行空郭  阅读(307)  评论(0编辑  收藏  举报