day01
String 類
是一個final類型的 不能被繼承,字符串的對象不會改變(裏面char[]字符數組的值不能被改變),字符串的引用變量可以改變
String 對象的創建(有很多種,歸納爲4種)
1)初始化的同時爲該對象賦予值 String str =”Hello”;
2) 使用new 關鍵字 String str = new String(“hello”);
3) 通過任何可以返回字符串的方法,用一個String 變量接受這些返回值的同時就創建了該對象
4)使用一個字符串常量就會自動創建String 對象 如:”njcjk”.length(); “fdf”+”fdsfds”;
String 常量池
爲了提高性能靜態字符串(字面量(直接寫出來的)常量 常量連接的結果)在常量池中創建 並儘量使用同一個對象重用靜態字符串 對於重複出現的字符串直接量會在常量池中查找並且返回
(變量連接的結果 ) a 創建動態新字符串對象是新對象 b 利用NEW運算創建的字符串是新對象
但是參數“ ABC” 是靜態字符串對象來自常量池
兩個字面量(常量)的連接時在編譯器中優化計算爲一個字符串對象 在運行期按照 “ABC”進行常量優化
如String s3 =“ABC”;
String s4 = “ABC”
String s5 = “A”+”BC”;
s3==s4 true 值相等 引用地址也相等
s3和s4引用同一個對象 優點是重用了
s3 == s5 引用地址相同 這都用到了常量池
String s6 = newString(“ABC”);
S3==S6; false
String s7 =”A”;
String s8 =s7+ “BC” ;
s8==s3; false
== 基本變量比較的是值 引用變量比較的是 引用的地址
= 基本變量是賦予值 引用變量是“ 指向”
equals()用來比較引用類型是否相等 object默認給的是和== 一樣 一般子類會重寫此方法根據業務邏輯給出具體的要求
byte[] bytes = s1.getBytes("UTF-8");
System.out.println(bytes.length);
將s1中的內容進行編碼,中文windows採用GBK(一個字符有三個字節), Linux和Mac採用UTF-8(一個字符編譯三個字節). getBytes方法不是檢查內存中字符串佔用的字節數量,因爲不固定但是可以傳參進行固定 主要用於字符串在網絡傳輸過程中亂碼問題的解決
加上重載的方法一共67個方法 構造方法就11個
常用的方法:
一個空格也代表佔用一個字符
int a indexOf(String[char] a); 取出字符第一次出現的位置找不到字符就返回-1
String s subString(7,7+4) ; 可以從7 開始節取4個字符 遵循左閉右開
String s subString(7) ; 從7開始 到最後全部 2 端都是關閉的
char c chatAt(int a) ; 取出位置的字符
以上的數字都是下標從零開始的
String s trim(String s) ; 去掉前後空白部分
booleanstartsWith(String s); //是否以那個字符開頭
booleanendsWith(String s) //是否以那個字符結尾 區分大小寫的 一個字符或者多個字符 空格也可以檢測 任何字符和空字符串相比都是true 注意與空格的區別
int n length() 字符串的長度
String s toUpperCase(String a) 變成大寫
String s toLowerCase(String a) 變成小寫
booleanequalsIgnoreCase(String another) 比較字符串與anther 是否一樣忽視大小寫
將此String與另一個String比較,不考慮大小寫。如果兩個字符串的長度相同,並且其中的相應字符都相等(忽略大小寫),則認爲這兩個字符串是相等的。
int lastIndexOf()返回指定字符在此字符串中最後一次出現處的索引。
String replace(charold,char new ); 在字符串中用新的替換舊的
String [] spilt (String s) 按照指定的分割符分割成字符串數組 並返回
public String[]split(String regex) 將分割的字符去掉 或者符和匹配的內容去掉
根據給定正則表達式的匹配拆分此字符串。
該方法的作用就像是使用給定的表達式和限制參數 0 來調用兩參數 split 方法。因此,所得數組中不包括
例如,字符串"boo:and:foo" 使用這些表達式可生成以下結果:
Regex | 結果 |
: | { "boo", "and", "foo" } |
o | { "b", "", ":and:f" } |
String valueOf(int s) ; 基本類型轉換成字符串
char[] | toCharArray() |
boolean compareTo(); 按照順序比較每個字符的unicode 編碼
小負數
大整數
零 相等
boolean | contains(CharSequence s) |
public boolean isEmpty()
當且僅當length() 爲 0 時返回true。
staticString valueOf(int a); 將一個int 類型的 返回一個字符串
返回 int 參數的字符串表示形式。
該表示形式恰好是單參數的 Integer.toString ()方法返回的結果。
StringtoString();返回字符串本身
/*
* 測試字符串的 trim() 方法
* 此字符串移除了前導和尾部空白的副本;如果沒有前導和尾部空白,則返回此字符串。 否則返回新的對象
*/
Strings1="\r\n Hello \t\r\n";
Strings2="Hello";
Strings3=s1.trim();
Strings4=s2.trim();
System.out.println(s3);
System.out.println(s4==s2);//true
/*
* startsWith 方法演示
* 檢查字符串是否以指定字符串爲開頭的。
*/
Stringstr="王寶強";
booleanb=str.startsWith("王");
System.out.println(b);//true
b=str.startsWith("");
System.out.println(b);//true
b=str.startsWith("王寶");
System.out.println(b);
2 StringBuilder
StringBuilderbuf=newStringBuilder();
//length() 檢查數組中有效字符個數
System.out.println(buf.length());
//capacity() 容量:字符數組的實際長度默認爲 16
System.out.println(buf.capacity
StringBuilder(int capacity) |
StringBuilder(String str) |
StringBuilder它裏面的方法的索引位置都是左閉右開 通常都是用(6,6+4)
append(String s);
insert(3,ih);
delete(3.op);
replace();
reserve();
substring(int start) | |
substring(int start, int end) |
int | capacity() |
具體看API
/*
* 可變字符串StringBuilder演示
*/
StringBuilderbuf=new StringBuilder();
//length()檢查數組中有效字符個數
System.out.println(buf.length());
//capacity()容量:字符數組的實際長度
System.out.println(buf.capacity());
buf.append("傳奇");
System.out.println(buf.length());
System.out.println(buf.capacity());
buf.append("哪一年在家裏的時候");
buf.insert(3,"據說");
System.out.println(buf.capacity());
buf.append("天天學習");
System.out.println(buf.capacity());
//檢查字符串的內容
System.out.println(buf);
//替換字符
//StringBuilder的API,適合“函數式”連寫
buf.replace(1,1+2, "老溼")
.delete(16, 16+2)
.append("吃雞");
System.out.println(buf);
連續的字符串連接 s3 = s1 + s1 + s1 + s2;
JAVA 自動利用StringBuilder進行處理不需要利用 StringBuilder去優化
看API 文檔
stringBuffer 和 StringBuild;
stringBuffer線稱安全 性能較慢
StringBuild; 線稱不安全 性能較快
*/
Strings1 = "A";
Strings2 = "B";
/*
* Java 中字符串鏈接功能是利用StringBuilder
* 實現的,s3= s1+s2 相當於
* s3 = new StringBuilder(s1)
* .append(s2).toString();
*/
Strings3 = s1+s2;
s3= s1+s3;//創建 StringBuilder
s3= s1+s3;//創建 StringBuilder
s3= s1+s3;//創建 StringBuilder
s3= s1+s3;//創建 StringBuilder
StringBuilderbuf=new StringBuilder(s2);
buf.insert(0,s1);
buf.insert(0,s1);
buf.insert(0,s1);
buf.insert(0,s1);
s3= buf.toString();
/*
* 性能測試
*/
testString(10000);
testStringBuilder(10000);
/*
* 連續的字符串連接
* s3 = s1 + s1 + s1 + s2;
* Java 會自動利用一個StringBuilder進行處理
* 不需要利用StringBuilder 去優化性能。
*
* 字符串字面量會在編譯器期間優化爲一個字符串
* 對象
* s3 = "A" + "B" +"C" + "D"
* s3 = "A" + 1 + 2 + 3;
*/
}
/**
* 測試String的連接性能
*/
publicstatic void testString(int n){
longt1 = System.nanoTime();
Strings="";
for(inti=0; i<n; i++){
s= s+"A";
}
longt2 = System.nanoTime();
System.out.println(t2-t1);
}
/**
* 測試StringBuilder的連接性能
*/
publicstatic void testStringBuilder(int n){
longt1=System.nanoTime();
StringBuilderbuf=new StringBuilder();
for(inti=0; i<n; i++){
buf.append("A");
}
longt2=System.nanoTime();
System.out.println(t2-t1);
}
day01
1 String 類
是一個final類型的 不能被繼承,字符串的對象不會改變(裏面char[]字符數組的值不能被改變),字符串的引用變量可以改變
String 對象的創建(有很多種,歸納爲4種)
1)初始化的同時爲該對象賦予值 String str =”Hello”;
2) 使用new 關鍵字 String str = new String(“hello”);
3) 通過任何可以返回字符串的方法,用一個String 變量接受這些返回值的同時就創建了該對象
4)使用一個字符串常量就會自動創建String 對象 如:”njcjk”.length(); “fdf”+”fdsfds”;
String 常量池
爲了提高性能靜態字符串(字面量(直接寫出來的)常量 常量連接的結果)在常量池中創建 並儘量使用同一個對象重用靜態字符串 對於重複出現的字符串直接量會在常量池中查找並且返回
(變量連接的結果 ) a 創建動態新字符串對象是新對象 b 利用NEW運算創建的字符串是新對象
但是參數“ ABC” 是靜態字符串對象來自常量池
兩個字面量(常量)的連接時在編譯器中優化計算爲一個字符串對象 在運行期按照 “ABC”進行常量優化
如String s3 =“ABC”;
String s4 = “ABC”
String s5 = “A”+”BC”;
s3==s4 true 值相等 引用地址也相等
s3和s4引用同一個對象 優點是重用了
s3 == s5 引用地址相同 這都用到了常量池
String s6 = newString(“ABC”);
S3==S6; false
String s7 =”A”;
String s8 =s7+ “BC” ;
s8==s3; false
== 基本變量比較的是值 引用變量比較的是 引用的地址
= 基本變量是賦予值 引用變量是“ 指向”
equals()用來比較引用類型是否相等 object默認給的是和== 一樣 一般子類會重寫此方法根據業務邏輯給出具體的要求
byte[] bytes = s1.getBytes("UTF-8");
System.out.println(bytes.length);
將s1中的內容進行編碼,中文windows採用GBK(一個字符有三個字節), Linux和Mac採用UTF-8(一個字符編譯三個字節). getBytes方法不是檢查內存中字符串佔用的字節數量,因爲不固定但是可以傳參進行固定 主要用於字符串在網絡傳輸過程中亂碼問題的解決
加上重載的方法一共67個方法 構造方法就11個
常用的方法:
一個空格也代表佔用一個字符
int a indexOf(String[char] a); 取出字符第一次出現的位置找不到字符就返回-1
String s subString(7,7+4) ; 可以從7 開始節取4個字符 遵循左閉右開
String s subString(7) ; 從7開始 到最後全部 2 端都是關閉的
char c chatAt(int a) ; 取出位置的字符
以上的數字都是下標從零開始的
String s trim(String s) ; 去掉前後空白部分
booleanstartsWith(String s); //是否以那個字符開頭
booleanendsWith(String s) //是否以那個字符結尾 區分大小寫的 一個字符或者多個字符 空格也可以檢測 任何字符和空字符串相比都是true 注意與空格的區別
int n length() 字符串的長度
String s toUpperCase(String a) 變成大寫
String s toLowerCase(String a) 變成小寫
booleanequalsIgnoreCase(String another) 比較字符串與anther 是否一樣忽視大小寫
將此String與另一個String比較,不考慮大小寫。如果兩個字符串的長度相同,並且其中的相應字符都相等(忽略大小寫),則認爲這兩個字符串是相等的。
int lastIndexOf()返回指定字符在此字符串中最後一次出現處的索引。
String replace(charold,char new ); 在字符串中用新的替換舊的
String [] spilt (String s) 按照指定的分割符分割成字符串數組 並返回
public String[]split(String regex) 將分割的字符去掉 或者符和匹配的內容去掉
根據給定正則表達式的匹配拆分此字符串。
該方法的作用就像是使用給定的表達式和限制參數 0 來調用兩參數 split 方法。因此,所得數組中不包括
例如,字符串"boo:and:foo" 使用這些表達式可生成以下結果:
Regex | 結果 |
: | { "boo", "and", "foo" } |
o | { "b", "", ":and:f" } |
String valueOf(int s) ; 基本類型轉換成字符串
char[] | toCharArray() |
boolean compareTo(); 按照順序比較每個字符的unicode 編碼
小負數
大整數
零 相等
boolean | contains(CharSequence s) |
public boolean isEmpty()
當且僅當length() 爲 0 時返回true。
staticString valueOf(int a); 將一個int 類型的 返回一個字符串
返回 int 參數的字符串表示形式。
該表示形式恰好是單參數的 Integer.toString ()方法返回的結果。
StringtoString();返回字符串本身
/*
* 測試字符串的 trim() 方法
* 此字符串移除了前導和尾部空白的副本;如果沒有前導和尾部空白,則返回此字符串。 否則返回新的對象
*/
Strings1="\r\n Hello \t\r\n";
Strings2="Hello";
Strings3=s1.trim();
Strings4=s2.trim();
System.out.println(s3);
System.out.println(s4==s2);//true
/*
* startsWith 方法演示
* 檢查字符串是否以指定字符串爲開頭的。
*/
Stringstr="王寶強";
booleanb=str.startsWith("王");
System.out.println(b);//true
b=str.startsWith("");
System.out.println(b);//true
b=str.startsWith("王寶");
System.out.println(b);
2 StringBuilder
StringBuilderbuf=newStringBuilder();
//length() 檢查數組中有效字符個數
System.out.println(buf.length());
//capacity() 容量:字符數組的實際長度默認爲 16
System.out.println(buf.capacity
StringBuilder(int capacity) |
StringBuilder(String str) |
StringBuilder它裏面的方法的索引位置都是左閉右開 通常都是用(6,6+4)
append(String s);
insert(3,ih);
delete(3.op);
replace();
reserve();
substring(int start) | |
substring(int start, int end) |
int | capacity() |
具體看API
/*
* 可變字符串StringBuilder演示
*/
StringBuilderbuf=new StringBuilder();
//length()檢查數組中有效字符個數
System.out.println(buf.length());
//capacity()容量:字符數組的實際長度
System.out.println(buf.capacity());
buf.append("範傳奇");
System.out.println(buf.length());
System.out.println(buf.capacity());
buf.append("哪一年在家裏的時候");
buf.insert(3,"據說");
System.out.println(buf.capacity());
buf.append("天天學習");
System.out.println(buf.capacity());
//檢查字符串的內容
System.out.println(buf);
//替換字符
//StringBuilder的API,適合“函數式”連寫
buf.replace(1,1+2, "老溼")
.delete(16, 16+2)
.append("吃雞");
System.out.println(buf);
連續的字符串連接 s3 = s1 + s1 + s1 + s2;
JAVA 自動利用StringBuilder進行處理不需要利用 StringBuilder去優化
看API 文檔
stringBuffer 和 StringBuild;
stringBuffer線稱安全 性能較慢
StringBuild; 線稱不安全 性能較快
*/
Strings1 = "A";
Strings2 = "B";
/*
* Java 中字符串鏈接功能是利用StringBuilder
* 實現的,s3= s1+s2 相當於
* s3 = new StringBuilder(s1)
* .append(s2).toString();
*/
Strings3 = s1+s2;
s3= s1+s3;//創建 StringBuilder
s3= s1+s3;//創建 StringBuilder
s3= s1+s3;//創建 StringBuilder
s3= s1+s3;//創建 StringBuilder
StringBuilderbuf=new StringBuilder(s2);
buf.insert(0,s1);
buf.insert(0,s1);
buf.insert(0,s1);
buf.insert(0,s1);
s3= buf.toString();
/*
* 性能測試
*/
testString(10000);
testStringBuilder(10000);
/*
* 連續的字符串連接
* s3 = s1 + s1 + s1 + s2;
* Java 會自動利用一個StringBuilder進行處理
* 不需要利用StringBuilder 去優化性能。
*
* 字符串字面量會在編譯器期間優化爲一個字符串
* 對象
* s3 = "A" + "B" +"C" + "D"
* s3 = "A" + 1 + 2 + 3;
*/
}
/**
* 測試String的連接性能
*/
publicstatic void testString(int n){
longt1 = System.nanoTime();
Strings="";
for(inti=0; i<n; i++){
s= s+"A";
}
longt2 = System.nanoTime();
System.out.println(t2-t1);
}
/**
* 測試StringBuilder的連接性能
*/
publicstatic void testStringBuilder(int n){
longt1=System.nanoTime();
StringBuilderbuf=new StringBuilder();
for(inti=0; i<n; i++){
buf.append("A");
}
longt2=System.nanoTime();
System.out.println(t2-t1);
}