摘要:第三階段常見對象的學(xué)習(xí)第一章常見對象類一類的概述及其構(gòu)造方法概述多個字符組成的一串?dāng)?shù)據(jù),例如也可以看成是一個字符數(shù)組。
第三階段 JAVA常見對象的學(xué)習(xí) 第一章 常見對象——String類 (一) String 類的概述及其構(gòu)造方法 (1) 概述
多個字符組成的一串?dāng)?shù)據(jù),例如 “abc” 也可以看成是一個字符數(shù)組。
而通過 API我們又可以知道
A:字符串字面值“abc”也可以看成是一個字符串對象
B:字符串是常量,一旦被賦值,就不能改變
(2) 構(gòu)造方法//空構(gòu)造 public String() //把字節(jié)數(shù)組轉(zhuǎn)換成字符串 public String(byte[] bytes) //把字節(jié)數(shù)組的一部分轉(zhuǎn)換成字符串 public String(byte[] bytes,int offset,int length) //把字符數(shù)組轉(zhuǎn)換成字符串 public String(char[] value) //把字符數(shù)組的一部分轉(zhuǎn)換成字符串 public String(char[] value,int offset,int count) //把字符串常量值轉(zhuǎn)換成字符串 public String(String original) //下面的這一個雖然不是構(gòu)造方法,但是結(jié)果也是一個字符串對象 String s = "hello";
簡單總結(jié):String類的構(gòu)造方法可以將 字節(jié)、字符數(shù)組、字符串常量(全部或者部分)轉(zhuǎn)換為字符串類型
(3) 字符串方法//返回此字符串的長度 public int length ();(4)構(gòu)造方法和lenght方法的小案例
//以前三個為例 public class StringDemo { public static void main(String[] args) { //public String():空構(gòu)造 String s1 = new String(); System.out.println("s1:" + s1); System.out.println("s1.length:" + s1.length()); System.out.println("-------------------------"); //把字節(jié)數(shù)組轉(zhuǎn)換成字符串:public String(byte[] bytes) byte[] bys = {97,98,99,100,101}; //abcde String s2 = new String(bys); System.out.println("s2:" + s2); System.out.println("s2.length:" + s2.length()); System.out.println("-------------------------"); //把字節(jié)數(shù)組的一部分轉(zhuǎn)換成字符串: //public String(byte[] bytes,int offset,int length) String s3 = new String(bys,1,3); System.out.println("s3:" + s3); System.out.println("s3.length:" + s3.length()); } } //運行結(jié)果: s1: s1.length:0 ------------------------- s2:abcde s2.length:5 ------------------------- s3:bcd s3.length:3
注:97,98,99,100,101 在ASCII碼中代表abcde,不熟悉的朋友請自行查閱
(5) 經(jīng)典例題(必看)例題一:
/* * 字符串特點:一旦被賦值,就不能改變 */ public class StringDemo { public static void main(String[] args) { String s = "Hello"; s += "World"; System.out.println("s:" + s); } } //運行結(jié)果: s:HelloWorld
解釋:不能改變是指字符串對象本身不能改變,而不是指對象的引用不能改變,上述過程中,字符串本身的內(nèi)容是沒有任何變化的,而是分別創(chuàng)建了三塊內(nèi)存空間,(Hello) (World) (HelloWorld) s → Hello + World → HelloWorld 。String內(nèi)容的改變實際上是通過字符串之間的拼接、斷開進行的,如上例中拼接后s的引用也就指向了 拼接后的HelloWorld
總結(jié):開發(fā)中,盡量少使用 + 進行字符串的拼接,尤其是循環(huán)內(nèi),我們更加推薦使用StringBuild、StringBuffer,此內(nèi)容下一篇詳細講解。
例題二:
//兩者的區(qū)別 String s = new String("hello"); String s = "hello";
前者創(chuàng)建了2個 (1個) 對象,后者創(chuàng)建了1個 (0個) 對象
下面解釋中若存在情況滿足則,分別為創(chuàng)建1個和0個對象
解釋:
String s = new String("hello"); 創(chuàng)建實例過程
在堆中創(chuàng)建一個對象 “hello” (new出來的),讓 s 引用這個對象
在字符串常量池中查找是否存在內(nèi)容為 “hello”的字符串對象
? A:若存在,將new出的對象與字符串常量池中已存在的相聯(lián)系
? B:若不存在,則在字符串常量池中創(chuàng)建一個內(nèi)容為 "abc" 的字符串對象,并與堆中 的對相聯(lián)系
String s = "hello"; 創(chuàng)建實例過程
在字符串常量中查找是否存在內(nèi)容為"hello"的字符串對象
? A:若存在,讓s直接引用該對象
? B:若不存在,則直接讓s引用該對象
總結(jié):前者new一個對象,“hello”隱式創(chuàng)建一個對象,后者只有“hello”創(chuàng)建一個對象,在開發(fā)中,盡量使用 String s = "hello" 的方式,效率比另一種高。
例題三:
public class StringDemo { public static void main(String[] args) { String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2);//false System.out.println(s1.equals(s2));//true String s3 = new String("hello"); String s4 = "hello"; System.out.println(s3 == s4);//false System.out.println(s3.equals(s4));//true String s5 = "hello"; String s6 = "hello"; System.out.println(s5 == s6);//true System.out.println(s5.equals(s6));//true } } //運行結(jié)果 false true false true true true
解釋: == 比較地址值是否相同、String中的equals()比較字符串內(nèi)容是否一致
例題四:
public class StringDemo2 { public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; String s3 = "HelloWorld"; System.out.println(s3 == s1 + s2); System.out.println(s3.equals(s1 + s2)); System.out.println(s3 == "Hello" + "World"); //重點 System.out.println(s3.equals("Hello" + "World")); } } //運行結(jié)果 false true true true
總結(jié):
字符串中如果是變量相加,先開空間,再拼接
字符串中如果是字符串相加,是先加,然后在常量池中找,如果有就直接返回否則就創(chuàng)建
(二) String類的功能 (1) 判斷功能//比較字符串的內(nèi)容是否相同,區(qū)分大小寫 boolean equals(Object obj) //比較字符串的內(nèi)容是否相同,不區(qū)分大小寫 boolean equalsIgnoreCase(String str) //判斷大字符串中是否包含小字符串 boolean contains(String str) //判斷某個字符串是否以某個指定的字符串開頭 boolean startsWith(String str) //判斷某個字符串是否以某個指定的字符串結(jié)尾 boolean endsWith(String str) //判斷字符串是否為空 boolean isEmpty() 注意: String s = “ ”; // 字符串內(nèi)容為空 String s = null; // 字符串對象為空
簡單模擬登錄案例 (String版)
import java.util.Scanner; /* * 模擬登陸案例,給三次機會,并且提示剩余次數(shù) * A:定義用戶名和密碼(已經(jīng)存在的) * B:鍵盤錄入用戶名和密碼 * C:比較用戶名和密碼 * D:給三次機會,用循環(huán)改進 */ public class StringDemo { public static void main(String[] args) { for (int x = 0; x < 3; x++) { String username = "admin"; String password = "admin888"; Scanner sc = new Scanner(System.in); System.out.println("請輸入用戶名"); String name = sc.nextLine(); System.out.println("請輸入密碼"); String psw = sc.nextLine(); if (name.equals(username) && psw.equals(password)) { System.out.println("登錄成功"); } else { if ((2 - x) == 0) { System.out.println("你的賬號已經(jīng)被鎖定,請與管理員聯(lián)系"); } else { System.out.println("登錄失敗,你還有" + (2 - x) + "次機會"); } } } } }(2) 獲取功能
//獲取字符串的長度 int length() //獲取指定索引的字符 char charAt(int index) //返回指定字符在此字符串中第一次出現(xiàn)的索引 int indexOf(int ch) //為什么這里是int而不是char? //原因是:‘a(chǎn)’和‘97’其實都能代表‘a(chǎn)’ int方便 //返回指定字符串在此字符串中第一次出現(xiàn)的索引 int indexOf(String str) //返回指定字符在此字符串中從指定位置后第一次出現(xiàn)的索引 int indexOf(int ch,int fromIndex) //返回指定字符串在此字符串中從指定位置后第一次出現(xiàn)的索引 int indexOf(String str,int fromIndex) //從指定位置開始截取字符串,默認到末尾 String substring(int start) //從指定位置開始指定位置結(jié)束截取字符串 String substring(int start,int end)
字符串中數(shù)據(jù)統(tǒng)計案例
import java.util.Scanner; /* * 案例:統(tǒng)計一個字符串中大寫字母字符,小寫字母字符,數(shù)字字符出現(xiàn) * 的次數(shù) */ public class StringDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入需要統(tǒng)計的數(shù)據(jù)"); String s = sc.nextLine(); int numberCount = 0; int smallCout = 0; int bigCout = 0; for (int x = 0; x < s.length(); x++) { char ch = s.charAt(x); if (ch >= "a" && ch <= "z") { smallCout++; } else if (ch >= "A" && ch <= "a") { bigCout++; } else if (ch >= "0" && ch <= "9") { numberCount++; } } System.out.println("大寫字母:" + bigCout + "個"); System.out.println("小寫字母:" + smallCout + "個"); System.out.println("數(shù)字:" + numberCount + "個"); } } //運行結(jié)果 請輸入需要統(tǒng)計的數(shù)據(jù) HelloWorld520 大寫字母:2個 小寫字母:8個 數(shù)字:3個(3) 轉(zhuǎn)換功能
//把字符串轉(zhuǎn)換為字節(jié)數(shù)組 byte[] getBytes() //把字符串轉(zhuǎn)換成字符數(shù)組 char[] toCharArray() //把字符數(shù)組轉(zhuǎn)換成字符串 static String valueOf(char[] chs) //把int類型的數(shù)據(jù)轉(zhuǎn)換成字符串 static String valueOf(int i) //注意:String類的valueOf方法可以把任何類型的數(shù)據(jù)轉(zhuǎn)換成字符串! //把字符串轉(zhuǎn)換成小寫 String toLowerCase() //把字符串轉(zhuǎn)換成大寫 String toUpperCase() //把字符串拼接 String concat(String str)(4) 其他功能
//替換功能 String replace(char old,char new) String replace(String old,String new) //去除字符串兩端空格 String trim() //按字典比較功能 int compareTo(String str) int compareToIgnoreCase(String str)
逆序輸出字符串案例
/* * 鍵盤輸入 "abc" * 輸出結(jié)果 "cba" */ import java.util.Scanner; public class StringDemo2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入:"); String line = sc.nextLine(); char[] chs = line.toCharArray(); String result = ""; for (int x = chs.length - 1; x >= 0; x--) { result += chs[x]; } System.out.println("reusult:" + result); } } //運行結(jié)果 請輸入: abc reusult:cba
大串中查詢小串案例
import java.util.Scanner; public class StringDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入被統(tǒng)計的數(shù)據(jù)"); String maxString = sc.nextLine(); System.out.println("請輸入統(tǒng)計關(guān)鍵詞"); String minString = sc.nextLine(); int count = getCount(maxString, minString); System.out.println("count:" + count); } public static int getCount(String maxString, String minString) { //定義一個統(tǒng)計變量,初始化為0 int count = 0; //先在大串中查找小串第一次出現(xiàn)的位置 int index = maxString.indexOf(minString); //索引不是-1,說明存在,統(tǒng)計變量++ while (index != -1) { count++; //把剛才的索引 + 小串的長度作為開始位置截取上一次的大串 //返回一個新的字符串,并把該字符串的值重新賦給大串 int startIndex = index + minString.length(); maxString = maxString.substring(startIndex); index = maxString.indexOf(minString); } return count; } } //運行結(jié)果 請輸入被統(tǒng)計的數(shù)據(jù) Hello520World520 請輸入統(tǒng)計關(guān)鍵詞 520 count:2結(jié)尾:
如果內(nèi)容中有什么不足,或者錯誤的地方,歡迎大家給我留言提出意見, 蟹蟹大家 !^_^
如果能幫到你的話,那就來關(guān)注我吧!(系列文章均會在公眾號第一時間更新)
在這里的我們素不相識,卻都在為了自己的夢而努力 ?一個堅持推送原創(chuàng)Java技術(shù)的公眾號:理想二旬不止
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74919.html
摘要:為了提高程序運行的效率,在軟件發(fā)布后,檢查默認是被關(guān)閉的。注意不能保證原子性,不能代替,且其會阻止編譯器對代碼的優(yōu)化。以下方法用來判斷一個字符串中是否包含中文字符。 前言 面試中對于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對應(yīng)的知識點擴展開來,那么這就是你的優(yōu)勢,本系列將講述一些java面試中的事,不會很詳細,但是應(yīng)該比較全面吧。 主要內(nèi)容 assert有什么作...
摘要:前言面試中對于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對應(yīng)的知識點擴展開來,那么這就是你的優(yōu)勢,本系列將講述一些面試中的事,不會很詳細,但是應(yīng)該比較全面吧。 前言 面試中對于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對應(yīng)的知識點擴展開來,那么這就是你的優(yōu)勢,本系列將講述一些java面試中的事,不會很詳細,但是應(yīng)該比較全面吧。 主要內(nèi)容 pa...
摘要:前言面試中對于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對應(yīng)的知識點擴展開來,那么這就是你的優(yōu)勢,本系列將講述一些面試中的事,不會很詳細,但是應(yīng)該比較全面吧。 前言 面試中對于技術(shù)職位,一般分筆試與面談,如果面試官的一些小問題你可以立馬找到對應(yīng)的知識點擴展開來,那么這就是你的優(yōu)勢,本系列將講述一些java面試中的事,不會很詳細,但是應(yīng)該比較全面吧。 主要內(nèi)容 說到...
閱讀 2989·2023-04-25 21:23
閱讀 3022·2021-09-22 15:24
閱讀 862·2019-08-30 12:55
閱讀 2095·2019-08-29 18:42
閱讀 2607·2019-08-29 16:27
閱讀 943·2019-08-26 17:40
閱讀 2173·2019-08-26 13:29
閱讀 2604·2019-08-26 11:45