Java學習筆記第五天——String類和StringBuilder類
Scanner 類: 用於獲取鍵盤錄入的資料。(基本資料型別,字串資料) Scanner sc = new Scanner(system.in);
String:字串類 由多個字元組成的一串資料 字串其本質就是一個字元陣列
構造方法: String(String original):把字串資料封裝成字串物件 String(char[] value):把字元陣列的資料封裝成字串物件 String(char[] value,int index,int count):把字元陣列中的一部分資料封裝成字串物件 //把陣列從index索引開始到第count的所有資料封裝成字串物件 注意:字串是一種比較特殊的引用資料型別,直接輸出字串物件最後輸出的是物件中的資料 eg:
public class StringDemo { public static void main(String[] args) { //方式1 //String(String original):把字串資料封裝成字串物件 String s = new String("hello"); System.out.println("s:"+s); System.out.println("----------"); //方式2 //String(char[] value):把字元陣列的資料封裝成字串物件 char[] arr ={'h','e','l','l','o'}; String s2 = new String(arr); System.out.println("s2:"+s2); System.out.println("----------"); //方式3 //String(cahr[] value,int index,int count):把字元陣列中的一部分資料封裝成字串物件 String s3 = new String(arr,0,arr.length); System.out.println("s3:"+s3); } }
通過構造方法建立的字串物件和直接賦值方式建立的字串物件的區別:
- 通過構造方法建立字串物件是在堆記憶體
- 直接賦值方式建立物件是在方法區的常量池
字串的內容是儲存在方法區的常量池裡面的,是為了方便字串的重複使用
==判斷的是什麼:
- 基本資料型別:比較的是基本資料型別的值是否相同
- 引用資料型別:比較的是引用資料型別的地址值是否相同
eg:
public class StringDemo2 { public static void main(String[] args) { String s1 = new String("hello"); String s2 = "hello"; String s3 = "hello"; System.out.println("s1:"+s1);//hello System.out.println("s2:"+s2);//hello System.out.println("s1==s2:"+(s1==s2));//false System.out.println("s1==s3:"+(s1==s3));//false System.out.println("s3==s2:"+(s3==s2));//true } }
Object類: 是類層次結構中的根類,那麼所有的類都直接或間接的繼承自該類 如果一個方法的形式引數是Object,那麼這裡我們就可以傳遞他的任意子類物件
String類的判斷功能:
- boolean equals(Object obj):比較字串的內容是否相同(區分大小寫)
- boolean equalsIgnoreCase(String str):比較字串的內容是否相同(忽略大小寫)
- boolean startWith(String str):判斷字串物件是否以指定的str開頭(區分大小寫)
- boolean endWith(String str):判斷字串物件是否以指定的str結尾(區分大小寫)
eg:
public class StringDemo {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
String s3 = "Hello";
//boolean equals(Object obj):比較字串的內容是否相同(區分大小寫)
System.out.println(s1.equals("hello"));
System.out.println(s1.equals(s3));
System.out.println("-------------");
//boolean equalsIgnoreCase(String str):比較字串的內容是否相同(忽略大小寫)
System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println("-------------");
//boolean startWith(String str):判斷字串物件是否以指定的str開頭
System.out.println(s1.startsWith("He"));
System.out.println(s1.startsWith("he"));
System.out.println("-------------");
//boolean endsWith(String str):判斷字串物件是否以指定的str結尾(區分大小寫)
System.out.println(s1.endsWith("lo"));
System.out.println(s1.endsWith("ol"));
}
}
String類的獲取功能:
- int length():獲取字串的長度,其實也就是字元的個數。
- char cahrAt(int index):獲取指定索引處的字元
- int indexOf(String str):獲取str在字元物件中第一次出現的索引(str的第一個字元的索引)
- String substring(int start):從start開始擷取字串,包括start
- String substring(int start,int end):從start開始,到end結束擷取字串。包括start,不包括end
eg:
public class StringDemo {
public static void main(String[] args) {
//建立字串物件
String s = "helloworld";
//int length():獲取字串的長度,其實也就是字元的個數。
System.out.println(s.length());
System.out.println("------------");
//char charAt(int index):獲取指定索引處的字元。
System.out.println(s.charAt(3));
System.out.println("------------");
//int indexOf(String str):獲取str在字元處物件中第一次出現的索引
System.out.println(s.indexOf("l"));
System.out.println(s.indexOf("owo"));
System.out.println(s.indexOf("owl"));//獲取str整段字串中第一個字元出現的索引
System.out.println("------------");
//String substring(int start):從start開始擷取字串
System.out.println(s.substring(2));
System.out.println("------------");
//String substring(int start,int end):從start開始,到end結束擷取字串。包括start,不包括end
System.out.println(s.substring(0, s.length()));
System.out.println(s.substring(0, 5));
}
}
String的轉換功能:
- char[] toCharArry():把字串轉換成字元陣列
- String toLowerCase():把字元轉換成小寫字串
- String toUpperCase():把字串轉換為大寫字母
eg:
public class StringDemo {
public static void main(String[] args) {
String s = "HelloWorld";
//char[] toCharArray():把字串轉換成字元陣列
char[] chs = s.toCharArray();
for(int i =0;i<s.length();i++){
System.out.print(chs[i]);
if(i==s.length()-1){
System.out.println();
}
}
System.out.println("------------");
//String toLowerCase():把字串轉換為大寫字串
System.out.println(s.toUpperCase());
//String toLowerCase():把字串轉換為小寫字串
System.out.println(s.toLowerCase());
}
}
String trim():去除字串兩端的空格 String[] split(String str):按照指定符號分割字串
eg:
public class StringDemo {
public static void main(String[] args) {
//建立字串物件
String s = "helloworld";
String s2 = " helloworld ";
String s3 = " hello world ";
System.out.println("---"+s+"---");
System.out.println("---"+s.trim()+"---");
System.out.println("---"+s2+"---");
System.out.println("---"+s2.trim()+"---");
System.out.println("---"+s3+"---");
System.out.println("---"+s3.trim()+"---");
System.out.println("----------------");
String s4 = "aa,bb,cc";
String[] strArry = s4.split(",");
for(int x =0;x<strArry.length;x++){
System.out.println(strArry[x]);
}
}
}
例題:
package com.itnineday_07;
/*
* 把陣列中的資料按照指定格式拼接成一個字串
* 舉例:int[] arr = {1,2,3};
* 輸出結果:[1,2,3]
*
* 分析:
* A:定義一個int型別的陣列
* B:寫方法實現把陣列中的元素按照指定的格式拼接成一個字串
* C:呼叫方法
* D:輸出結果
*/
public class StringTest {
public static void main(String[] args) {
int[] arr = {1,2,3};
//寫方法實現把陣列中的元素按照指定的格式拼接成一個字串
//呼叫方法
String s = arryToString(arr);
System.out.println("s:"+s);
}
public static String arryToString(int[] arr){
String s = "";
s +="[";
for(int x =0;x<arr.length;x++){
if(x==arr.length-1){
s +=arr[x];
}else{
s+=arr[x];
s+=",";
}
}
s+="]";
return s;
}
}
StringBuilder類
StringBuilder是一個可變的字串。字串緩衝區。 String和StringBuilder的區別: String的內容是固定的 StringBuilder的內容是可變的
構造方法:StringBuilder()
成員方法: public int capacity(): 返回當前容量 public int length():返回長度(字元數) 容量:理論值 長度:實際值
eg:
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println("sb:"+sb);
System.out.println("sb.capacity():"+sb.capacity());
System.out.println("sb.length():"+sb.length());
}
}
新增功能: public StringBuilder append(任意型別):新增資料,並返回自身物件 反轉功能 public StringBuilder reverse()
eg:
public class StringBuilderDemo {
public static void main(String[] args) {
//建立物件
StringBuilder sb = new StringBuilder();
/*//新增功能
StringBuilder sb2 = sb.append("hello");
System.out.println("sb:"+sb);
System.out.println("sb2:"+sb2);
System.out.println(sb ==sb2);//true
*/
sb.append("hello");
sb.append("world");
System.out.println("sb:"+sb);
//反轉功能
sb.reverse();
System.out.println("sb:"+sb);
}
}
引用型別和引用型別作比較 比較的是地址