多個字符組成的一串數據,例如 「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類的構造方法能夠將 字節、字符數組、字符串常量(所有或者部分)轉換爲字符串類型spa
//返回此字符串的長度
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,不熟悉的朋友請自行查閱code
例題一:cdn
/* * 字符串特色:一旦被賦值,就不能改變 */
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技術的公衆號:理想二旬不止