多個字符組成的一串數據,例如 「abc」 也能夠當作是一個字符數組。java
而經過 API咱們又能夠知道數組
A:字符串字面值「abc」也能夠當作是一個字符串對象學習
B:字符串是常量,一旦被賦值,就不能改變ui
//空構造 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類的構造方法能夠將 字節、字符數組、字符串常量(所有或者部分)轉換爲字符串類型code
//返回此字符串的長度 public int length ();
//之前三個爲例 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,不熟悉的朋友請自行查閱對象
例題一:索引
/* * 字符串特色:一旦被賦值,就不能改變 */ 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
總結:
//比較字符串的內容是否相同,區分大小寫 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) + "次機會"); } } } } }
//獲取字符串的長度 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個
//把字符串轉換爲字節數組 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)
//替換功能 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技術的公衆號:理想二旬不止