字符串
字符串:使用雙引號引住的任意個字符,稱為字符串。在java中使用String類表示字符串。
字符
字符:單引號引住的一個字符,用char表示,字符串是字符的數(shù)組。
字符數(shù)組轉(zhuǎn)換為字符串
public static void main(String[] args) {
//定義字符數(shù)組
char ch[] = {'j','j','x','y'};
//將字符數(shù)組轉(zhuǎn)換為字符串
String str = new String(ch);
System.out.println(str);
}
字符串轉(zhuǎn)換為字符數(shù)組
public static void main(String[] args) {
String str = "jjxy";
char[] chars = str.toCharArray();
for (char ch:chars ) {
System.out.println(ch);
}
}
字符串與字面量
java創(chuàng)建字符串有兩種方式
1.字面量:直接使用雙引號定義的字符串叫做字面量。
2.字符串對象:使用new 運(yùn)算符創(chuàng)建的字符串叫做字符串對象。
區(qū)別:字面量存儲位置為常量池或者元空間中。字符串對象存儲在堆中。
String StringBuffer StringBuilder
String
1.String聲明為final的,不可被繼承
2.String實(shí)現(xiàn)了Serializable接口:表示字符串是支持序列化的。
實(shí)現(xiàn)了Comparable接口:表示String可以比較大小
3.String內(nèi)部定義了final char[] value用于存儲字符串?dāng)?shù)據(jù)
4.String:代表不可變的字符序列。簡稱:不可變性。
??體現(xiàn):
- 當(dāng)對字符串重新賦值時,需要重寫指定內(nèi)存區(qū)域賦值,不能使用原有的value進(jìn)行賦值。
- 當(dāng)對現(xiàn)有的字符串進(jìn)行連接操作時,也需要重新指定內(nèi)存區(qū)域賦值,不能使用原有的value進(jìn)行賦值。
- 當(dāng)調(diào)用String的replace()方法修改指定字符或字符串時,也需要重新指定內(nèi)存區(qū)域賦值,不能使用原有的value進(jìn)行賦值。
5.通過字面量的方式(區(qū)別于new)給一個字符串賦值,此時的字符串值聲明在字符串常量池中。
6.字符串常量池中是不會存儲相同內(nèi)容的字符串的。
StringBuff
1.java.lang.StringBuffer代表可變的字符序列,JDK1.0中聲明,可以對字符串內(nèi)容進(jìn)行增刪,此時不會產(chǎn)生新的對象。
2.線程安全的,效率低
3.作為參數(shù)傳遞時,方法內(nèi)部可以改變值。
4.StringBuffer類不同于String,其對象必須使用構(gòu)造器生成
- StringBuffer():初始容量為16的字符串緩沖區(qū)
- StringBuffer(int size):構(gòu)造指定容量的字符串緩沖區(qū)
- StringBuffer(String str):將內(nèi)容初始化為指定字符串內(nèi)容
5.擴(kuò)容問題:如果要添加的數(shù)據(jù)底層數(shù)組盛不下了,那就需要擴(kuò)容底層的數(shù)組。(默認(rèn)情況下,擴(kuò)容為原來容量的2倍 + 2,同時將原有數(shù)組中的元素復(fù)制到新的數(shù)組中。)
StringBuilder
StringBuilder 和 StringBuffer 非常類似,均代表可變的字符序列,而且提供相關(guān)功能的方法也一樣,但它是線程不安全的,所以效率高

字符串常用方法
字符串連接 +
public static void main(String[] args) {
String firstName = "李";
String lastName = "逵";
String fullName = firstName + lastName;
System.out.println(fullName);//李逵
}
字符串連接 concat
public static void main(String[] args) {
String firstName = "李";
String lastName = "逵";
String fullName = firstName.concat(lastName);
System.out.println(fullName);//李逵
}
字符串相等比較 ==
public static void main(String[] args) {
String firstName = "李";
String lastName = "李";
//判斷firstName和lastName指向同一塊內(nèi)存嗎,比較的是值,不是內(nèi)容
boolean result = firstName == lastName;
System.out.println(result);//true
}
字符串相等比較 equals
public static void main(String[] args) {
String firstName = "李";
String lastName = "李";
//判斷firstName和lastName指向同一塊內(nèi)存嗎,比較的是值,不是內(nèi)容
boolean result1 = firstName.equals(lastName);
boolean result2 = firstName == lastName;
System.out.println(result1);//true
System.out.println(result2);//true
}
public static void main(String[] args) {
String firstName = new String("李");
String lastName = new String("李");
//判斷firstName和lastName指向同一塊內(nèi)存嗎,比較的是值,不是內(nèi)容
boolean result1 = firstName.equals(lastName);
boolean result2 = firstName==lastName;
System.out.println(result1);//true
System.out.println(result2);//false
}
字符串忽略大小寫相等比較 equalsIgnoreCase
public static void main(String[] args) {
String firstName = "li";
String lastName = "Li";
//判斷firstName和lastName指向同一塊內(nèi)存嗎,比較的是值,不是內(nèi)容
boolean result1 = firstName.equalsIgnoreCase(lastName);
System.out.println(result1);//true
}
字符串長度 length()
public static void main(String[] args) {
String username = "admin";
int length = username.length();
System.out.println(length); // 5
}
在字符串種查找 indexOf
public static void main(String[] args) {
String filename = "D:\\2002-07-09\\JavaAPI\\JDK_API_1.8_zh_CN.CHM";
int index = filename.indexOf("JavaAPI");
System.out.println(index);//14 找不到返回-1
}
轉(zhuǎn)大寫 toUpperCase
public static void main(String[] args) {
String word = "aoHaYgaoZayiMskongbaWAATAXIWA";
System.out.println(word.toUpperCase());
System.out.println(word);
}
轉(zhuǎn)小寫 toLowerCase
public static void main(String[] args) {
String word = "aoHaYgaoZayiMskongbaWAATAXIWA";
System.out.println(word.toLowerCase());
System.out.println(word);
}
切割字符串 split
public static void main(String[] args) {
String mail = "admin@itlaobing@.com";
int index1 = mail.indexOf("@");
int index2 = mail.lastIndexOf("@");
System.out.println(index1);//5
System.out.println(index2);//15
if((index1 == index2)&& index1!=-1 && index2!=-1){
System.out.println("合法");
}else{
System.out.println("不合法");
}
}
public static void main(String[] args) {
String mail = "admin@itlaobing.com";
String[] split = mail.split("@");
if(split.length==2){
System.out.println("合法");
}else{
System.out.println("不合法");
}
}
字符串開頭 startsWith
public static void main(String[] args) {
String website = "www.itlaobing.cn";
System.out.println(website.startsWith("www"));
}
字符串結(jié)尾 endsWith
public static void main(String[] args) {
String website = "www.itlaobing.cn";
System.out.println(website.endsWith("com"));
}
去掉兩邊的空格 trim
public static void main(String[] args) {
String username = " admin ";
System.out.println(username.trim());//去掉兩邊的空格
}
替換字符串內(nèi)容 replace
public static void main(String[] args) {
String str = "今天我吃了一個壞蛋黃派";
str = str.replace("壞蛋","**");
System.out.println(str);
}
截取子串 substring
public static void main(String[] args) {
String file = "d:\\2002-07-09\\javaapi\\jdk_api_1.6_zh_cn.chm";
int startIndex = file.lastIndexOf("\\")+1;
int dotIndex = file.lastIndexOf(".");
String filename = file.substring(startIndex, dotIndex);
System.out.println(filename);
}
截取字符 charAt
public static void main(String[] args) {
String str = "admin@123456";
char ch = str.charAt(5);
int index = str.indexOf("@");
System.out.println(ch);
System.out.println(index);
}
字符串格式化輸出 format
public static void main(String[] args) {
String str = null;
str = String.format("見過,%s及%s", "晁天王", "眾位頭領(lǐng)");
System.out.println(str);
str = String.format("字母a的大寫是:%c", 'A');
System.out.println(str);
str = String.format("3>7的結(jié)果是:%b", 3 > 7);
System.out.println(str);
str = String.format("100的一半是:%d", 100 / 2);
System.out.println(str);
// 使用printf()方法代替format方法來格式化字符串
System.out.printf("50元的書打8.5折扣是:%f 元", 50 * 0.85);
}