JAVA---字串相關的類
阿新 • • 發佈:2022-03-22
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 } }