1. 程式人生 > 其它 >JAVA---字串相關的類

JAVA---字串相關的類

JAVA---字串相關的類

package java0;

import org.junit.Test;

/**
 *
 *
 * @create 2022-03-18 14:59
 */








public class StringTest {

    /*
    結論:
    1.常量與常量的拼接結果在常量池。且常量池中不會存在相同內容的常量
    2.只要其中有一個是變數,結果就在堆中
    3.如果拼接的結果呼叫intern()方法,返回值就在常量池中。
     */

    @Test
    public void test4(){
        String s1="javaEEhadoop";
        String s2="javaEE";
        String s3=s2+"hadoop";
        System.out.println(s1 == s3);//false

        final String s4="javaEE";
        String s5=s4+"hadoop";
        System.out.println(s1 == s5);//true

    }

    @Test
    public void test3(){
        String s1="javaEE";
        String s2="hadoop";

        String s3="javaEEhadoop";
        String s4="javaEE"+"hadoop";
        String s5=s1+"hadoop";
        String s6="javaEE"+s2;
        String s7=s1+s2;

        System.out.println(s3 == s4);//true
        System.out.println(s3 == s5);//false
        System.out.println(s3 == s6);//false
        System.out.println(s3 == s7);//false
        System.out.println(s5 == s6);//false
        System.out.println(s5 == s7);//false
        System.out.println(s6==s7);//false

        String s8=s6.intern();//此時s8中儲存的地址是字串常量池中的
        System.out.println(s3 == s8);//true
    }


    /*
String的例項化方式
方式一:通過字面量定義的方式
方式二:通過new+構造器的方式

String s=new String("abc");
以上述方式建立物件,在記憶體中建立了幾個物件?
答:兩個,一個是堆空間中new結構,另一個是char[]對應的常量池中的資料:"abc"

 */
    @Test
    public void test2(){
        //通過字面量定義的方式:此時的s1和s2的資料javaEE宣告在方法區中的字串常量池中
        String s1="javaEE";
        String s2="javaEE";

        //通過new+構造器的方式:此時的s3和s4儲存的地址值,是資料在堆空間中開闢空間以後對應的地址值。
        String s3=new String("javaEE");
        String s4=new String("javaEE");

        System.out.println(s1 == s2);//true
        System.out.println(s1==s3);//false
        System.out.println(s1==s4);//false
        System.out.println(s3==s4);//false

        System.out.println("*************");


    }


    /*
1.String宣告為final的,不可被繼承
2.String實現了Serializable介面:表示字串是支援序列化的
        實現了Comparable介面:表示String可以比較大小

3.String內部定義了final char[] value用於儲存字串資料
4.String代表不可變的字元序列。
    體現:1.當對字串重新賦值時,需要重寫指定記憶體區域賦值,不能使用原有的value進行賦值。
          2.當對現有的字串進行連線操作時,也需要重新指定記憶體區域賦值,不能使用原有的value進行賦值
          3.當呼叫String的replace()方法修改指定字元或字串時,也需要重新指定記憶體區域賦值

5.通過字面量的方式(區別於new)給一個字串賦值,此時的字串值宣告在字串常量池中
6.字串常量池中是不會儲存相同內容的字串的。
 */
    @Test
    public void test1(){
        String s1="abc";//字面量的定義方式
        String s2="abc";
        s1="hello";

        System.out.println(s1 == s2);//比較s1和s2的地址值

        System.out.println(s1);
        System.out.println(s2);

        System.out.println("***********");

        String s3="abc";
        s3+="def";
        System.out.println(s3);
        System.out.println(s2);

        System.out.println("*************");

        String s4="abc";
        String s5=s4.replace('a','m');
        System.out.println(s4);
        System.out.println(s5);
    }
}
package java0;

import org.junit.Test;

/**
 *
 *
 *
 * @create 2022-03-19 17:20
 */
public class StringMethodTest {

    /*
        boolean endsWith(String suffix):測試此字串是否以指定的字尾結束
        boolean startsWith(String prefix):測試此字串是否以指定的字首開始
        boolean startssWith(String prefix,int toffset):測試此字串從指定索引開始的子字串是否以指定字首開始

        boolean contains(CharSequence s):當且僅當此字串包含指定的char值序列時,返回true
        int indexOf(String str):返回指定子字串在此字串中第一次出現處的索引
        int indexOf(String str):返回指定子字串在此字串中第一次出現處的索引,從指定的索引開始

        int lastIndexOf(String str):返回指定子字串在此字串中最後一次出現處的索引。
        int lastIndexOf(String str,int fromIndex):返回指定子字串在此字串中最後一次出現處的索引,從指定的索引開始反向搜尋。

        住:indexOf和lastIndexOf方法如果未找到都是返回-1

     */

    @Test
    public void test3(){
        String str1="helloworld";
        boolean b1=str1.endsWith("rld");
        System.out.println(b1);

        boolean b2=str1.startsWith("He");
        System.out.println(b2);

        boolean b3=str1.startsWith("ll",2);
        System.out.println(b3);

        String str2="wor";
        System.out.println(str1.contains(str2));

        System.out.println(str1.indexOf("lol"));

        System.out.println(str1.indexOf("lo",3));






    }




    /*
    int length():返回字串的長度:return value.length
    char charAt(int index):返回某索引處的字元    return value[index]
    boolean isEmpty():判斷是否是空字串:return value.length == 0
    String toLowerCase():將String中所有字元轉換為小寫
    String toUpperCase():將String中所有字元轉換為大寫
    String trim():返回字串的副本,忽略前導空白和尾部空白
    boolean equals(Object obj):比較字串的內容是否相同
    boolean equalsIgnoreCase(String anotherString):與equals方法類似,忽略大小寫
    String concat(String str):將指定字串連線到此字串的結尾。等價於用“+”
    int compareTo(String anotherString):比較兩個字串的大小
    String substring(int beginIndex):返回一個新的字串,它是此字串的從beginIndex開始擷取到最後的一個子字串
    String substring(int beginIndex,int endIndex):返回一個新字串,它是此字串從beginIndex開始擷取到endIndex(不包含)的一個子字串。
     */

    @Test
    public void test2(){
        String s1="HelloWorld";
        String s2="helloworld";

        System.out.println(s1.equals(s2));
        System.out.println(s1.equalsIgnoreCase(s2));

        String s3="abc";
        String s4=s3.concat("def");
        System.out.println(s4);

        String s5="abc";
        String s6=new String("abe");
        //返回的是不同字母的差值。
        System.out.println(s5.compareTo(s6));

        String s7="北京尚矽谷教育";
        String s8=s7.substring(2);
        System.out.println(s7);
        System.out.println(s8);

        String s9=s7.substring(2,5);
        System.out.println(s9);

    }

    @Test
    public void test1(){
        String s1="HelloWorld";
        System.out.println(s1.length());
        System.out.println(s1.charAt(0));
        System.out.println(s1.charAt(9));

        System.out.println(s1.isEmpty());

        String s2=s1.toLowerCase();
        System.out.println(s2);


        String s3="    he   llo w  orld    ";
        String s4=s3.trim();
        System.out.println("----"+s3+"----");
        System.out.println("----"+s4+"----");

    }
}
package java0;

import org.junit.Test;

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 *
 *
 * @create 2022-03-21 14:29
 */
public class StringTest1 {

    /*
    String與byte[]之間的轉換
    編碼:String-->byte[]:呼叫String的getBytes()
    解碼:byte[]--->String:呼叫String的構造器

    說明:解碼時,要求解碼使用的字符集必須與編碼使用的字符集一致,否則會出現亂碼。

     */
    @Test
    public void test3(){
        String str1="abc123中國";
        byte[] bytes=str1.getBytes();//會使用預設的字符集,進行編碼
        System.out.println(Arrays.toString(bytes));
    }

    /*
    String 與 char[]之間的轉換
    String--->char[]:呼叫String的toCharArray()
    char[]--->String:  呼叫String的構造器

     */

    @Test
    public void test2(){
        String str1="abc123";

        char[] charArray=str1.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            System.out.println(charArray[i]);
        }

        char[] arr=new char[]{'h','e','l','l','o'};
        String str2=new String(arr);
        System.out.println(str2);
    }

/*
 * String--->基本資料型別、包裝類:呼叫包裝類的靜態方法:parseXxx(str)
 * 基本資料型別、包裝類----String:呼叫String過載的valueOf(xxx)
*/
    @Test
    public void test1(){
        String str1="123";

        int num=Integer.parseInt(str1);
        System.out.println(num);

        String str2=String.valueOf(num);
        System.out.println(str2);

        String str3=num+"";
        System.out.println(str1==str3);//false

    }
}