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