2019年3月6日, 星期三java
21:53數組
1、Scanner安全
1. Scanner的概述app
2. Scanner的構造方法原理優化
a. Scanner(Inputstream source)ui
b. System類下有一個靜態的字段spa
i. public static final Inputstream in;標準的輸入流,對應着鍵盤錄入線程
c. 通常方法orm
i. hasNextxxx()判斷是否還有下一個輸入項,其中Xxx能夠是Int, Double等。若是須要判斷是否包含下一個字符串,則能夠省略xxx對象
ii. nextxxx()獲取下一個輸入項。Xxx的含義和上個方法中的xx相同,默認狀況下, Scanner使用空格,回車等做爲分隔符
3. Scanner獲取數據出現的小問題及解決方案
a. 兩個經常使用的方法:
i. 獲取一個int類型的值:public int nextInt();
ii. 獲取一個String類型的值:public String nextLint();
b. 當nextInt()和nextLine()一塊兒使用
public static void main(String[] args) { Scanner sn=new Scanner(System.in); System.out.println("請輸入一個整數:"); int i=sn.nextInt(); System.out.println("請輸入一個字符串"); String str=sn.nextLine(); } |
實際上執行程序後,輸出的以下
∵ nextInt()是鍵盤錄入整數的方法,當咱們錄入10的時候,其實在鍵盤上錄入的是10和「\r\n」,nextInt()方法只獲取了10就結束了;nextLine()是鍵盤錄入字符串的方法,能夠接受任意類型,可是它遇到\r\n就證實一行結束了。
解決方案:
①建立兩個Scanner對象
public static void main(String[] args) { Scanner sn=new Scanner(System.in); System.out.println("請輸入一個整數:"); int i=sn.nextInt();
Scanner sn2=new Scanner(System.in); System.out.println("請輸入一個字符串"); String str=sn2.nextLine(); } |
②鍵盤錄入都使用nextLine()接收,而後在判斷後轉爲整數類型。(推薦)
2、String類
1. String類的概述
a. 字符串字面值「abc」也能夠當作是一個字符串對象。
b. 字符串是常量,一旦被賦值就不能被改變了。雖然能夠從新賦值,可是已經不是相同的地址值了。
2. String類的構造方法
a. 常見的構造方法:
i. public String();//無參構造。
ii. public String(byte[] bytes);//把字節數組轉成字符串
iii. public String(byte[] bytes,int index,int length);//把字節數組的一部分轉成字符串
iv. public String(char[] value);//把字符數組轉成字符串
v. public String(char[] value,int index,int count);//把字符數組的一部分轉成字符串
vi. public String(String original);//把字符串常量值轉成字符串
3. 常見問題:
a. String s1=new String("abc");//這句代碼建立了幾個對象
兩個,一個在常量池中,一個在堆內存中。
b. String s1="a" + 「b」+"c";String s2="abc";那麼s1==s2 和是s1.equals(s2)分別是什麼?
都爲true,java中有常量優化機制,在("a" + 「b」+"c")賦值給s1以前就已經變成了"abc"
c. String s1="ab";String s2="abc"; String s3=s1+"c";那麼s2==s3和s2.equals(s3)輸出值爲?
s2==s3輸出false,緣由是在(s1+"c")時在堆中會建立一個StringBuild(或者StringBuffer)對象,再調用toString轉爲"abc",改地址和s2的地址值不同。因此爲false
d. 總結:
①字符串的equals方法,若是字符串的有相同的字符序列則爲true,不然爲false;字符串的「==」則比較的是字符串對象所指向的地址值是否相同;
②java語言提供對字符串串聯符(+)以及將其餘對象轉換爲字符串的特殊支持。字符串串聯是經過StringBuild(或者StringBuffer)類及其append方法實現的,字符轉換是經過toString()方法實現的。
4. String類的判斷功能
a. boolean equals( Object obj):比較字符串的內容是否相同,區分大小寫
b. boolean equalsIgnore Case( string str):比較字符串的內容是否相同,忽略大小寫
c. boolean contains( string str):判斷大字符串中是否包含小字符串
d. boolean startswith( string str):判斷字符串是否以某個指定的字符串開頭
e. boolean endsvath( String str:判斷字符串是否以某個指定的字符串結尾
f. boolean isEmpty():判斷字符串是否爲空。
3、StringBuffer類的概述
1. StringBuffer類的概述
a. 一個相似於String的字符串緩衝區,不能修改。雖然在任意時間點上它都包含某種特定的字符序列,但經過某些方法調用能夠改變該序列的長度和內容。
b. 線程安全的可變字符序列。
2. StringBuffer和String的區別:
a. String是一個不可變的字符序列。
b. StringBuffer是一個可變的字符序列。
3. StringBuffer類的構造方法
a. 構造方法:
i. public StringBuffer();//無參構造,初始容量爲16個字符。
ii. public StringBuffer(int capacity);//制定容量的字符串緩衝區對象
iii. public StringBuffer(String str);//制定字符串內容的字符串緩衝區對象
b. StringBuffer的方法:
i. public int capacity();//返回當前容量。 理論值
ii. public int length();//返回長度(字符數),實際值。
4. StringBuffer經常使用方法:
a. StringBuffer的添加功能
i. public StringBuffer append(String str);//能夠把任意類型數據添加到字符串緩衝區裏面,並返回字符串緩衝區自己。
ii. public StringBuffer insert(int offset,String str);//在制定位置把任意類型的數據插入到字符串緩衝區裏面,並返回字符串緩衝區自己。
eg:
demo |
運行結果 |
public class Demo_StringBuffer{ public static void main(String[] args) { StringBuffer sb=new StringBuffer(); StringBuffer sb2=sb.append(true); StringBuffer sb3=sb.append("helloworld"); StringBuffer sb4=sb.append(123); } } |
|
∵StringBuffer是字符串緩衝區,當new的時候是在堆內建立了一個對象,底層是一個長度爲16的字符數組,當調用添加方法時,不會再從新建立新對象,而是在不斷向原緩衝區添加字符
b. StringBuffer的刪除功能
i. public StringBuffer deleteCharAt(int index);//刪除指定位置的字符,並返回自己
ii. public StringBuffer delete (int start,int end);//刪除從指定位置開始(包含)到指定位置(不包含)結束的內容,並返回自己。
c. StringBuffer的替換功能:
i. public StringBuffer replace(int start,int end,String str);//從start開始到end用str替換
d. StringBuffer的反轉功能
i. public StringBuffer reverse();//字符串反轉
e. Stringbuffer的截取功能
i. public String substring(int start);//從指定位置截取到末尾
ii. public String substring(int start,int end);//截取從start位置開始到end位置結束,包括開始位置,不包括結束位置。
注意:返回值再也不是StringBuffer,而是String,原StringBuffer自己不變化。
5. String與StringBuffer的轉換
a. String→Stringbuffer轉換
i. 經過構造方法: public StringBuffer(String str);
ii. 經過append()方法 eg:sb.append("helloworld");
b. StringBuffer→String轉換
i. 經過構造方法: public String(StringBuffer sb);
ii. 經過toString()方法
iii. 經過substring(0,length);