[TOC]
>[danger] ##### 字符串的比較
|方法聲明 |功能介紹|
| --- | --- |
| boolean equals?(Object anObject) | 兩個字符串內容是否相等返回布爾|
|boolean equalsIgnoreCase?(String anotherString) |忽略大消息判斷兩個字符串的內容是否相等|
|雙等 |內存地址是否相等|
~~~
public class StringTest {
public static void main(String[] args) {
String str = "abc"; // 同一個字符串常量池
String str1 = "abc"; // 同一個字符串常量池
String str2 = new String("abc"); // 構造參數是同一個字符串常量池
String str3 = "ABC";
// 內存比較
System.out.println(str == str1); // true
System.out.println(str == str2);// false
// 具體內容比較
System.out.println(str.equals(str2)); // true
// 忽略大小寫比較
System.out.println(str.equalsIgnoreCase(str3));// true
}
}
~~~
>[danger] ##### 數組和字符轉換
|方法聲明 |功能介紹|
| --- | --- |
|String toString() |返回字符串本身|
|byte[] getBytes() |將當前字符串內容轉換為byte數組并返回|
|char[] toCharArray() |用于將當前字符串內容轉換為char數組并返回|
~~~
import java.util.Arrays;
public class TestStr {
public static void main(String[] args) {
String str = new String("你好word");
// 調用toString 方法返回字符串
System.out.println(str.toString());
// 將字符串轉換為 字節數組 byte
byte[] bArr = str.getBytes();
System.out.println(Arrays.toString(bArr));
// 打印每個字節
for (byte s : bArr) {
System.out.println(s);
}
// 將字節轉換會字符串
System.out.println(new String(bArr));
// 將字符串轉換為 字符數組 char
char[] cArr = str.toCharArray();
System.out.println(Arrays.toString(cArr));
// 打印每個字符
for (char s : cArr) {
System.out.println(s);
}
// 將字符轉換會字符串
System.out.println(new String(cArr));
}
}
~~~
* 打印結果
~~~
你好word
[-60, -29, -70, -61, 119, 111, 114, 100]
-60
-29
-70
-61
119
111
114
100
你好word
[你, 好, w, o, r, d]
你
好
w
o
r
d
好w
o
r
d
你好word
~~~
>[danger] ##### 判斷字符長度和是否為空
|方法聲明 |功能介紹|
| --- | --- |
|int length()| 返回字符串字符序列的長度|
|boolean isEmpty() |判斷字符串是否為空|
~~~
public class TestStr {
public static void main(String[] args) {
String str = "";
System.out.println("當前字符串是否為空" + (str.length() == 0)); // 打印結果:當前字符串是否為空true
System.out.println("當前字符串是否為空" + str.isEmpty()); // 打印結果:當前字符串是否為空true
}
}
~~~
>[danger] ##### 通過位置獲取字符
1. 指數范圍為**0至length() - 1** 。 序列的第一個char值位于索引0 ,下一個位于索引1 ,依此類推,就像**數組索引一樣**
2. **IndexOutOfBoundsException**- 如果 index參數為負數或不小于此字符串的長度
|方法聲明 |功能介紹|
| --- | --- |
|char charAt(int index) |方法charAt用于返回字符串**指定位置的字符(char 類型)**。|
~~~
public class TestStr {
public static void main(String[] args) {
String str = "word";
System.out.println(str.charAt(0)); // w
System.out.println(str.charAt(1)); // o
System.out.println(str.charAt(2)); // r
System.out.println(str.charAt(3)); // d
System.out.println(str.charAt(4)); // java.lang.StringIndexOutOfBoundsException: String index out of range: 4
}
}
~~~
>[danger] ##### 字符串大小比較
1. 比較的前后兩個字符串的 **對應位置字符 的ASCII碼的差值**,兩個字符串如果首字符**相同**,則**比較下一個字符**,直到有不同的為止,返回**該不同的字符的ASCII碼差值**。如果**兩個字符串不一樣長**,可以參與比較的字符**又完全一樣**,則返回**兩個字符串的長度差值**
2. 如果參數字符串**等于**此字符串,**則值0** ; 如果此字符串按字典順序**小于**字符串參數,則**小于0** ; 如果此字符串按字典順序**大于**字符串參數,則值**大于0** 。
|方法聲明 |功能介紹|
| --- | --- |
|int compareTo(String anotherString) |用于比較調用對象和參數對象的大小關系|
|int compareToIgnoreCase(String str) |不考慮大小寫,也就是'a'和'A'是相等的關系|
~~~
public class TestStr {
public static void main(String[] args) {
String str = "abcba";
System.out.println(str.compareTo("acc")); // b 和 c 比較 98 - 99 = -1
System.out.println(str.compareTo("abcbaaA")); // abcba 都一樣則長度比較 5-7 = -2
System.out.println(str.compareTo("ABCBA")); // a 和 A 比較 97 - 65 = 32
System.out.println(str.compareTo("abcba")); // 0
// 使用 compareToIgnoreCase 忽略大小寫
System.out.println(str.compareToIgnoreCase("ABCBA")); // 0
}
}
~~~
* 打印結果
~~~
-1
-2
32
0
0
~~~
>[danger] ##### 字符串拼接
1. 使用 concat 可以拼接字符串,和加號不同點如下
| **點** | **concat()方法** | **+運算符** |
| --- | --- | --- |
| **定義** | 一種**concat()方法**是組合兩個字符串的方法。 | **+運算符**用于連接任意數量的字符串。 |
| **參數數量** | 在**CONCAT()**方法,僅接受字符串的一個參數,然后將其與另一個字符串連接。 | 在**+運算符**接受任意數量的參數并組合所有字符串。 |
| **參數類型** | **CONCAT()**方法僅接受字符串類型的參數。 | **+運算符**接受任何類型的參數并將其轉換為字符串類型,然后將它們組合。 |
| **創建新的字符串** | **CONCAT()**將兩個字符串連接起來,并僅在字符串長度大于0的情況下返回新的字符串對象,否則返回相同的對象。 | **+運算符**每次與字符串長度無關都創建一個新的字符串對象。 |
| **空指針異常** | 在**CONCAT()**當string與null串聯時,此方法引發NullPointer Exception。 | **+運算符**連接字符串,沒有任何錯誤。 |
| **性能** | **concat()方法**比+運算符更好,因為它僅在字符串長度大于零(0)時創建一個新對象,因此它使用較少的內存。 | **+運算符**始終會創建一個新字符串,而與字符串長度無關,因此會占用更多內存。 |
~~~
public class TestStr {
public static void main(String[] args) {
String str = "abcba";
String conStr = str.concat("some");
System.out.println(conStr); // abcbasome
}
}
~~~
>[danger] ##### 轉換字符串大小寫
|方法聲明 |功能介紹|
| --- | --- |
|String toLowerCase() |返回字符串的小寫形式|
|String toUpperCase() |返回字符串的大寫形式|
~~~
public class TestStr {
public static void main(String[] args) {
String str = "abcba";
// 大寫
String upStr = str.toUpperCase();
System.out.println(upStr); // ABCBA
// 小寫
String lowStr = str.toLowerCase();
System.out.println(lowStr); // abcba
}
}
~~~
>[danger] ##### 字符串判斷包含方法
|方法聲明 |功能介紹|
| --- | --- |
| boolean contains(CharSequence s) | 用于判斷當前字符串是否包含參數指定的內容String |
| boolean startsWith(String prefix) | 判斷字符串是否以參數字符串開頭|
| boolean startsWith(String prefix, int toffset) | 從指定位置開始是否以參數字符串開頭|
| boolean endsWith(String suffix) | 判斷字符串是否以參數字符串結尾|
~~~
public class TestStr {
public static void main(String[] args) {
String str = "abcba";
// 是否包含字符
boolean b1 = str.contains("cba"); // true
System.out.println(b1);
b1 = str.contains("ABC");
System.out.println(b1); // false 區分大小寫
// 判斷字符串是否以...開頭
b1 = str.startsWith("ab");
System.out.println(b1); // true
// 從下標1開始開頭是否是bc
b1 = str.startsWith("bc", 1);
System.out.println(b1); // true
// 判斷字符串是否以...結尾
b1 = str.endsWith("ba");
System.out.println(b1); // true
}
}
~~~
>[danger] ##### 去掉前后空格
1. `String trim()`,去掉前后空格
~~~
public class TestStr {
public static void main(String[] args) {
String str = " ab cba ";
String trimStr = str.trim();
System.out.println(trimStr); // ab cba
}
}
~~~
>[danger] ##### 字符和字符串的查找(腳標位置)
| 方法聲明 | 功能介紹|
| --- | --- |
| int indexOf(int ch) | 用于返回當前字符串中參數ch指定的字符第一次出現的下標|
| int indexOf(int ch, int fromIndex)| 用于從fromIndex位置開始查找ch指定的字符|
| int indexOf(String str) | 在字符串中檢索str返回其第一次出現的位置,若找不到返回-1|
| int indexOf(String str, int fromIndex)| 表示從字符串的fromIndex位置開始檢索str第一次出現的位置|
| int lastIndexOf(int ch)| 用于返回參數ch指定的字符最后一次出現的下標|
| int lastIndexOf(int ch, in fromIndex)| 用于從fromIndex位置開始查找ch指定字符出現的下標|
| int lastIndexOf(String str) | 返回str指定字符串最后一次出現的下標|
| int lastIndexOf(String str, int fromIndex)| 用于從fromIndex位置開始反向搜索的第一次出現的下標。|
~~~
public class TestStr {
public static void main(String[] args) {
// 1.構造String類型的對象并打印
String str1 = new String("Good Good Study, Day Day Up!");
// 2.實現字符串中指定字符和字符串的查找功能
int pos = str1.indexOf('g');
System.out.println("pos = " + pos); // -1 代表查找失敗
pos = str1.indexOf('G');
System.out.println("pos = " + pos); // 0 該字符第一次出現的索引位置
// 表示從下標0開始查找字符'G'第一次出現的索引位置,包含0
pos = str1.indexOf('G', 0);
System.out.println("pos = " + pos); // 0
pos = str1.indexOf('G', 1);
System.out.println("pos = " + pos); // 5
// 查找字符串
pos = str1.indexOf("day");
System.out.println("pos = " + pos); // -1
pos = str1.indexOf("Day");
System.out.println("pos = " + pos); // 17 字符串中第一個字符的下標
pos = str1.indexOf("Day", 17);
System.out.println("pos = " + pos); // 17 字符串中第一個字符的下標
pos = str1.indexOf("Day", 18);
System.out.println("pos = " + pos); // 21 字符串中第一個字符的下標
// 編寫通用代碼實現將字符串str1中所有"Day"出現的索引位置找到并打印出來
pos = 0;
while ((pos = str1.indexOf("Day", pos)) != -1) {
System.out.println("pos = " + pos);
pos += "Day".length();
}
}
}
~~~
>[danger] ##### 字符串截取
1. 子字符串從指定的beginIndex開始,并擴展到索引**endIndex - 1處的字符。 因此子串的長度是endIndex-beginIndex** 。
2. **IndexOutOfBoundsException**- 如果 beginIndex為負數,或者 endIndex大于此 String對象的長度,或者 beginIndex大于 endIndex 。
|方法聲明 |功能介紹|
| --- | --- |
|String substring(int beginIndex, int endIndex)|返回字符串中從下標beginIndex(包括)開始到endIndex(不包括)結束的子字符串|
|String substring(int beginIndex)|返回字符串中從下標beginIndex(包括)開始到字符串結尾的子字符串|
~~~
public class TestStr {
public static void main(String[] args) {
String str = new String("Good Good Study, Day Day Up!");
String str1 = str.substring(5);
System.out.println(str1); // Good Study, Day Day Up!
String str3 = str.substring(5, 7);
System.out.println(str3); // Go
String str2 = str.substring(5, 100);
System.out.println(str2); // IndexOutOfBoundsException
}
}
~~~
>[danger] ##### 字符串分割
1. `String[] split(String regex) `參數regex為正則表達式,以regex所表示的字符串為分隔符,將字符串拆分成字符串數組
* 注單個字符或者字符串都也可算為正則表達式
~~~
import java.util.Arrays;
public class TestStr {
public static void main(String[] args) {
String str = "a1b2c3d5e";
String[] strArr = str.split("c");
System.out.println(Arrays.toString(strArr)); // [a1b2, 3d5e]
String[] strArr1 = str.split("\\d");
System.out.println(Arrays.toString(strArr1)); // [a, b, c, d, e]
}
}
~~~
>[danger] ##### 字符串替換
|方法名稱 |方法說明|
| --- | --- |
|String replace(char oldChar, char newChar)|使用參數newChar替換此字符串中出現的所有參數 oldChar|
|String replaceFirst(String regex,String replacement)|替換此字符串匹配給定的正則表達式的第一個子字符串|
|String replaceAll(String regex, String replacement)|將字符串中匹配正則表達式regex的字符串替換成replacement|
~~~
public class TestStr {
public static void main(String[] args) {
String str = "a1b2c3d5ec";
String rStr = str.replace('c', 'z');
System.out.println(rStr); // a1b2z3d5ez
String rStr1 = str.replaceFirst("c", "f");
String rStr2 = str.replaceFirst("\\d", "f");
System.out.println(rStr1); // a1b2f3d5ec
System.out.println(rStr2); // afb2c3d5ec
String rStr3 = str.replaceAll("c", "f");
String rStr4 = str.replaceAll("\\d", "f");
System.out.println(rStr3); // a1b2f3d5ef
System.out.println(rStr4); // afbfcfdfec
System.out.println(str); // a1b2c3d5ec
}
}
~~~
>[danger] ##### 字符串拼接 -- join
|方法名稱 |方法說明|
| --- | --- |
|static String join(CharSequence delimiter, CharSequence... elements)|`delimiter`:每個元素要添加的分隔符,`elements`:需要添加分隔符的字符串|
|static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements) |`delimiter`:每個元素要添加的分隔符,`elements`:表示被連接的數組(也可以是集合)|
~~~
public static void main(String[] args) {
// 字符串數組
String []arr={"ab","ce","df"};
System.out.println(String.join(",",arr));
// 集合
List<String> list=new ArrayList<>();
list.add("s1");
list.add("s5");
list.add("s3");
System.out.println(String.join("-",list));
// 顯示時間
String date = String.join("/","01","25","2020");
System.out.print(date);
String time = String.join(":", "12","10","10");
System.out.println(" "+time);
}
~~~
* 打印結果
~~~
ab,ce,df
s1-s5-s3
01/25/2020 12:10:10
~~~
- windows -- 環境變量
- Vscode -- 編寫java
- 初始java
- java -- 關鍵字
- 編寫第一個java程序
- java -- 注釋
- 計算機存儲 -- 進制
- java -- 類型
- java -- 變量
- 數字類型
- 布爾類型
- 字符類型
- 類型轉換
- 雙等比較是什么
- java -- 運算符
- 算數運算符
- 字符串拼接
- 關系/比較運算符
- 自增減運算符
- 邏輯運算符
- 三目運算
- 賦值運算符
- 移位運算符
- 位運算符
- 運算符優先級
- java -- 流程控制語句
- if /else if /if -- 判斷
- switch case分支結構
- for -- 循環
- 用雙重for循環
- while -- 循環
- do while -- 循環
- 案例練習
- java -- 數組
- 數組的存儲
- 數組的增刪改查
- 數組的特點
- 數組案例
- 二維數組
- 數組的工具方法
- java -- 方法
- java -- 方法的重載
- java -- 方法的調用流程
- java -- 類方法傳參注意事項
- java -- 方法練習案例
- 對比 return break continue
- for each循環
- java -- 基礎練習
- java -- 面向對象
- java -- 創建類和對象
- java -- 訪問控制符
- java -- 類成員方法
- java -- 構造方法
- java -- this
- java -- 封裝
- java -- 對象內存圖
- java -- 創建對象案例
- java -- static
- java -- 繼承
- super -- 關鍵字
- java -- 構造塊和靜態代碼塊
- java -- 重寫
- java -- final
- java -- 多態
- java -- 抽象類
- java -- 接口
- 引用類型數據轉換
- 綜合案例
- java -- 內部類
- java -- 回調模式
- java -- 枚舉類型
- java -- switch 使用枚舉
- java -- 枚舉方法使用
- java -- 枚舉類實現接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 遞歸練習
- java -- 設計模式
- 單例模式
- java -- 注解
- java -- 元注解
- Java -- 核心類庫
- java -- 處理字符串
- Java -- String
- String -- 常用方法
- String -- 正則
- Java -- StringBuilder 和 StringBuffer
- 知識點
- Java -- StringJoiner 字符串拼接
- 練習題
- 字符串的總結
- Java -- 包裝類
- Integer
- Double
- Boolean
- Character
- java -- 集合類
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 獲取當前時間戳
- Java -- 異常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法