Java字串基本用法
目錄
前言
在Java中,String類是字串操作類,提供了多種方法對字串進行操作;關於String類的基本操作,可分為以下幾類:
- 基本操作方法
- 字串比較
- 字串與其他資料型別之間的轉換
- 字元與字串的查詢
- 字串的替換與修改
- 字串的擷取與拆分
一、字串的建立
- String類位於Java的lang包下,所以在使用時不需要通過import引入(導包)
- String類是final類,不能被繼承,物件建立後不可修改,並且由0或多個字元組成,包含在一對雙引號之間
- String類其實是通過char陣列來儲存字串的,它值是不可變的
建立方式有3種:
第1種:在字串池裡直接建立
String str = "Hello Word";
String str2 = "Hello Word";
str2 = "Hello Word,welcome";
此時字串池裡已經有了Hello Word
,當再定義String str2 = "Hello Word";
時,str2
不會再重新建立新字串,而是會指向原來的字串地址;當str2 = "Hello Word,welcome";
時, str2
會重新建立新字串Hello Word,welcome
第2種:在堆中開闢空間建立並儲存
String str = new String("Hello Word");
這種方法在字串池中建立了Hello Word
,還在堆中開闢了一片記憶體,用來儲存該字串在字串池裡的地址。
第3種:字元陣列轉換成字串
char[] char_ = {'H','e','l','l','o'};
String str = new String(char_ );
二、常用方法
1.String.valueOf()
功能:將指定型別轉換為字串
// int → String
String str = String.valueOf(123);
// double → String
String str = String.valueOf(1.23);
// boolean → String
String str = String.valueOf(true);
// char[] → String
char[] array = { 1, 2, 3 };
String str = String.valueOf(array);
2.String.format()
功能:按照指定的格式(%d-%s-%f
)生成新字串
int i1 = 1, i2 = 2;
int sum = i1 + i2;
// 格式化輸出
System.out.printf("%d+%d=%d\n", i1, i2, sum);
// 格式化字串
String str = String.format("%d+%d=%d", i1, i2, sum);
System.out.println(str);
// 你好xx,歡迎來xx
String str2 = String.format("你好%s,歡迎來%s", "Blues", "杭州");
System.out.println(str2);
3.equals() 、equalsIgnoreCase() 和 ==
equals():基本資料型別沒有方法,引用資料型別(String)進行值(內容)的比較
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str1 = input.nextLine();
String str2 = input.nextLine();
System.out.println(str1 == str2);//返回 false
//字串內容的比較
boolean isEquals = str1.equals(str2);
System.out.println(isEquals);
}
equalsIgnoreCase():比較字串內容是否一致,不區分大小寫
String str1 = "Hello";
String str2 = "hello";
System.out.println(str1.equalsIgnoreCase(str2));// 返回 true
==:基本資料型別進行值的比較,引用資料型別進行記憶體地址的比較
public static void main(String[] args) {
// 基本資料型別
int a = 1, b = 2;
System.out.println(a == b);// 返回 false
String str1 = "Hello";
String str2 = "Hello";
String str3 = new String("Hello");
// 引用資料型別String
System.out.println(str1 == str2);// 返回 true
// 引用資料型別進行記憶體地址的比較
System.out.println(str1 == str3);// 返回 false
}
4.charAt()
按照指定的索引位置,獲取對應位置的字元;下標位置不能越界
String str = "Hello";
System.out.println(str.charAt(0)); // 返回 H
5.toCharArray()
將字串轉換為字元陣列
String str = "你好世界";
char[] chars = str.toCharArray();
System.out.println(chars[0]);// 你
System.out.println(chars[1]);// 好
System.out.println(chars[2]);// 世
System.out.println(chars[3]);// 界
6.split()
按照指定的字串
,對原字串進行切割
String str = "你,好,世,界";
String[] strings = str.split(",");
Stream.of(strings).forEach(System.out::println);
String str = "你好,世界。歡迎,你。";
String[] strings = str.split("。");
String[] strings1 = strings[0].split(",");
String[] strings2 = strings[1].split(",");
strings = new String[4];
System.arraycopy(strings1, 0, strings, 0, 2);
System.arraycopy(strings2, 0, strings, 2, 2);
System.out.println(Arrays.toString(strings));
指定字串中如果包含特殊字元
String str = "127.0.0.1";
String[] strings = str.split("\\.");// 切割字串如果是特殊符號「正則表示式」,需加入`\\`進行轉義
Stream.of(strings).forEach(System.out::println);
7.compareTo()
比較兩個字串之間的大小
比較規則:
先比較兩個字串對應字元 ASCII碼(英文)或Unicode碼(中文)的"差", 如果比較的所有字元一致,再比較字串的長度“差”。
String str1 ="你";
String str2 ="好";
// 正數:字串1 > 字串 2
// 零:字串1 = 字串2
// 負數:字串1 < 字串2
System.out.println(str1.compareTo(str2));
8.contains()
判斷當前字串中是否包含指定子字串
public static void main(String[] args) {
String str ="你好";
System.out.println(str.contains("你"));
}
9.startsWith()
判斷當前字串是否以指定字串“開頭”
String str ="Hello, Word";
System.out.println(str.startsWith("Hello"));
判斷當前字串第x位是否以指定字串“開頭”(索引從0開始)
String str ="Hello, Word";
System.out.println(str.startsWith("e", 1));
10.endsWith()
判斷當前字串是否以指定字串“結尾”
String str ="Hello, Word";
System.out.println(str.endsWith("d"));
11.indexOf()
查詢字串的首次出現的位置(索引從0開始);如果找到,則返回該子字串的第一次出現的位置; 如果沒有找到,則返回負數
String str ="Hello, Word";
System.out.println(str.indexOf("e"));
從當前字串的指定開始位置查詢
String str = "Hello, Word";
System.out.println(str.indexOf("o", 5));
12.lastIndexOf()
查詢字串的最後一次出現的位置;如果找到,則返回該子字串的最後一次出現的位置; 如果沒有找到,則返回負數
String str = "Hello, Word";
System.out.println(str.lastIndexOf("o"));
從指定位置開始查詢指定字串的最後一次出現的位置
String str = "Hello, Word";
System.out.println(str.lastIndexOf("o", 5));
13.replace()
替換全部指定字串
String str = "Hello你好, Word你好";
System.out.println(str.replace("你好", ""));
String str = "Hello你好, Word你好";
System.out.println(str.replaceAll("你好", ""));
替換指定字串(第一個)
String str = "Hello你好, Word你好";
System.out.println(str.replaceFirst("你好", ""));
14.toUpperCase()
轉大寫
String str = "Hello, Word";
System.out.println(str.toUpperCase());
15.toLowerCase()
轉小寫
String str = "Hello, Word";
System.out.println(str.toLowerCase());
16.substring()
擷取子字串
String str = "f418f46077d8f4dd0e59146df843667.jpg";
// 擷取字尾名
System.out.println(str.substring(str.indexOf(".")));
// 擷取檔名
System.out.println(str.substring(0, str.indexOf(".")));
// 擷取指定區間
System.out.println(str.substring(1, 5));
17.String.join()
將字串陣列,按照指定字串進行連線
public static void main(String[] args) {
String[] strings = {"你", "好", "世", "界"};
String str = String.join("#", strings);
System.out.println(str);
}
18.StringJoiner
進行字串的連線
public static void main(String[] args) {
String[] strings = {"你", "好", "世", "界"};
//用法1:
// StringJoiner stringJoiner = new StringJoiner(","); // 只使用分隔符
//用法2:
StringJoiner stringJoiner = new StringJoiner(",", "{", "}"); // 分隔符,字首,字尾
Stream.of(strings).forEach(str -> stringJoiner.add(str));
System.out.println(stringJoiner.toString());
}