JAVA字符串操作——在藍橋杯的基本應用

我們來系統地梳理一下 Java 中的字符串操作。Java 的字符串操作非常豐富,主要涉及到?StringStringBuilder?和?StringBuffer?這三個核心類。


目錄

一、核心類簡介

二、String?類的常用操作

1. 創建字符串

2. 獲取基本信息

3. 比較字符串

4. 查找與判斷

5. 轉換與替換

6. 分割與連接

三、StringBuilder?/?StringBuffer?的常用操作

1. 創建對象

2. 修改字符串(核心功能)

四、性能對比:+?拼接 vs?StringBuilder

1.錯誤示例:使用?+?拼接

2.正確示例:使用?StringBuilder


一、核心類簡介

在開始具體操作前,先理解這三個類的區別至關重要:

import java.lang.StringBuilder;
特性線程安全性能適用場景
String不可變?(Immutable)較低(每次修改都創建新對象)字符串內容不需要改變的場景,如作為常量、Map 的鍵等。
StringBuilder可變?(Mutable)最高單線程環境下,需要頻繁修改字符串內容(拼接、刪除、替換等)。
StringBuffer可變?(Mutable)較低(因為有同步開銷)多線程環境下,需要安全地修改字符串內容。

核心結論:

  • 如果字符串內容不改變,用?String
  • 如果在單線程下需要頻繁修改字符串,用?StringBuilder
  • 如果在多線程下需要安全地修改字符串,用?StringBuffer

二、String?類的常用操作

String?類提供了大量用于處理字符串的方法。

1. 創建字符串
// 1. 直接賦值 (推薦,JVM 會有字符串常量池優化)
String str1 = "Hello Java";// 2. 使用 new 關鍵字 (會創建新的對象,不推薦)
String str2 = new String("Hello Java");
2. 獲取基本信息
String str = "Hello World";
System.out.println(str.length());         // 獲取長度: 11
System.out.println(str.isEmpty());        // 判斷是否為空字符串: false
System.out.println(str.charAt(0));        // 獲取指定索引的字符: 'H'
System.out.println(str.indexOf('W'));     // 查找字符 'W' 的索引: 6
System.out.println(str.indexOf("World")); // 查找子串 "World" 的索引: 6
System.out.println(str.lastIndexOf('o')); // 從后向前查找字符 'o' 的索引: 7
3. 比較字符串
String s1 = "hello";
String s2 = "world";
String s3 = "Hello";// 1. equals() : 比較內容是否相等 (區分大小寫)
System.out.println(s1.equals(s2)); // false// 2. equalsIgnoreCase() : 比較內容是否相等 (不區分大小寫)
System.out.println(s1.equalsIgnoreCase(s3)); // true// 3. compareTo() : 比較字典順序
// s1 < s2 返回負數, s1 == s2 返回 0, s1 > s2 返回正數
System.out.println(s1.compareTo(s2)); // -15 (h 的 ASCII 碼比 w 小)// 4. == : 比較的是兩個對象的內存地址 (是否是同一個對象)
String s4 = "hello";
String s5 = new String("hello");
System.out.println(s1 == s4); // true (字符串常量池,指向同一個對象)
System.out.println(s1 == s5); // false (new 創建了新對象,地址不同)
4. 查找與判斷
String str = "This is a test string.";System.out.println(str.contains("test"));  // 判斷是否包含子串: true
System.out.println(str.startsWith("This")); // 判斷是否以指定前綴開頭: true
System.out.println(str.endsWith("ing."));  // 判斷是否以指定后綴結尾: true
System.out.println(str.substring(5));     // 從索引 5 開始截取到末尾: "is a test string."
System.out.println(str.substring(5, 7));   // 截取 [5, 7) 區間: "is"
5. 轉換與替換
String str = "  Hello  World  ";// 1. trim() : 去除首尾空格
System.out.println(str.trim()); // "Hello  World"// 2. toUpperCase() / toLowerCase() : 大小寫轉換
System.out.println(str.toUpperCase()); // "  HELLO  WORLD  "
System.out.println(str.toLowerCase()); // "  hello  world  "// 3. replace() : 替換字符或子串
// 注意:String 不可變,replace() 返回一個新字符串
String newStr = str.replace('l', 'p');
System.out.println(newStr); // "  Heppo  Worpd  "
System.out.println(str.replace("World", "Java")); // "  Hello  Java  "
6. 分割與連接
String str = "apple,banana,orange,grape";// 1. split() : 分割字符串,返回一個字符串數組
String[] fruits = str.split(",");
// fruits: ["apple", "banana", "orange", "grape"]
System.out.println(Arrays.toString(fruits));// 2. join() : 連接字符串 (靜態方法)
String result = String.join("-", "apple", "banana", "orange");
// result: "apple-banana-orange"
System.out.println(result);

三、StringBuilder?/?StringBuffer?的常用操作

它們的方法幾乎完全一樣,區別在于線程安全。這里以?StringBuilder?為例。

1. 創建對象
StringBuilder sb = new StringBuilder(); // 默認容量 (16)
StringBuilder sb2 = new StringBuilder("Hello"); // 初始內容
2. 修改字符串(核心功能)
StringBuilder sb = new StringBuilder("Hello");// 1. append() : 追加內容
sb.append(" World");
System.out.println(sb); // "Hello World"// 2. insert() : 在指定位置插入內容
sb.insert(5, ","); // 在索引 5 的位置插入 ","
System.out.println(sb); // "Hello, World"// 3. delete() : 刪除指定區間的內容
sb.delete(5, 7); // 刪除 [5, 7) 區間,即刪除 ", "
System.out.println(sb); // "HelloWorld"// 4. replace() : 替換指定區間的內容
sb.replace(5, 10, " Java"); // 替換 [5, 10) 區間為 " Java"
System.out.println(sb); // "Hello Java"// 5. reverse() : 反轉字符串
sb.reverse();
System.out.println(sb); // "avaJ olleH"// 6. toString() : 轉換為 String 對象
String finalString = sb.toString();
System.out.println(finalString); // "avaJ olleH"

四、性能對比:+?拼接 vs?StringBuilder

在循環中頻繁使用?+?拼接字符串是 Java 新手常見的性能陷阱。

1.錯誤示例:使用?+?拼接
String result = "";
for (int i = 0; i < 10000; i++) {result = result + i; // 每次循環都會創建一個新的 String 對象,性能極差!
}
2.正確示例:使用?StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {sb.append(i); // 在同一個對象上追加,性能極高!
}
String result = sb.toString();

原因分析:

  • result + i?的過程實際上是:new StringBuilder().append(result).append(i).toString()。每次循環都會創建一個?StringBuilder?和一個新的?String?對象,導致大量內存浪費和 GC(垃圾回收)壓力。
  • StringBuilder?的?append?方法是在一個預先分配好空間的字符數組上進行操作,避免了頻繁創建新對象的開銷。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96124.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96124.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96124.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【深度學習基礎】PyTorch Tensor生成方式及復制方法詳解

目錄PyTorch Tensor生成方式及復制方法詳解一、Tensor的生成方式&#xff08;一&#xff09;從Python列表/元組創建&#xff08;二&#xff09;從NumPy數組創建&#xff08;三&#xff09;特殊初始化方法&#xff08;四&#xff09;從現有Tensor創建&#xff08;五&#xff09;…

動態規劃:入門思考篇

1. 簡單類比 假如我們要求全國人數&#xff0c;那么我們只要知道各個省的人數&#xff0c;然后將各個省的人數相加即可&#xff0c;要想知道各個省的人數&#xff0c;只要將這個省下面所有的市人數相加即可&#xff0c;同樣&#xff0c;如果想要知道各個市的人數&#xff0c;只…

小楊的 X 字矩陣(舉一反三)-洛谷B3865 [GESP202309 二級]

題目描述 小楊想要構造一個 X 字矩陣&#xff08; 為奇數&#xff09;&#xff0c;這個矩陣的兩條對角線都是半角加號 &#xff0c;其余都是半角減號 - 。例如&#xff0c;一個 55 的 X 字矩陣如下&#xff1a; --- --- ---- --- --- 請你幫小楊根據給定的 打印出對應的“X …

數據組合與合并:Pandas 數據整合全指南 +缺失值處理

數據組合與合并&#xff1a;Pandas 數據整合全指南在進行數據分析之前&#xff0c;數據清洗與整合是關鍵步驟。 遵循“整潔數據”&#xff08;Tidy Data&#xff09;原則&#xff1a; 每個觀測值占一行每個變量占一列每種觀測單元構成一張獨立的表格 整理好數據后&#xff0c;常…

c#聯合halcon的基礎教程(案例:亮度計算、角度計算和缺陷檢測)(含halcon代碼)

目錄 1.環境配置 2.案例一&#xff1a;亮度計算 halcon代碼&#xff1a; 主界面代碼&#xff1a; 3.案例二&#xff1a; 角度計算 halcon代碼&#xff1a; 主界面代碼&#xff1a; 4.案例三&#xff1a;缺陷檢測 halcon代碼&#xff1a; 主界面代碼&#xff1a; 通過…

大數據云原生是什么

"云原生"&#xff08;Cloud Native&#xff09;指的是?利用云計算原生優勢&#xff08;彈性、按需服務、自動化、分布式等&#xff09;來設計、構建、部署和運行大數據應用和工作負載的方法論與技術體系?。它不是簡單地“把大數據平臺搬到云上”&#xff0c;而是從…

Pytest項目_day16(yaml和parametrize結合)

查詢手機號歸屬地 我們首先可以在YAML文件中定義測試數據 方式一&#xff0c;使用- 注意&#xff1a;當我們需要一次傳入兩個參數時&#xff0c;需要定義兩層迭代&#xff0c;即兩層列表不夠直觀&#xff0c;容易寫錯 輸出的結果為&#xff1a; 然后我們可以將測試數據傳入test…

【Nginx指南】從核心原理到生產實踐

目錄Nginx指南&#xff1a;從核心原理到生產實踐引言&#xff1a;Nginx在現代架構中的核心地位一、Nginx核心能力與應用場景1.1 多場景適配的全能型中間件1.2 技術優勢&#xff1a;Nginx成為行業標準的關鍵二、Nginx安裝部署&#xff1a;源碼編譯與包管理方案2.1 源碼編譯&…

物體檢測

目錄 1 目標定位 2 地標檢測 3 目標檢測 4 在卷積網絡上實現滑動窗口 5 邊界框預測 6 交并比 7 非極大值抑制 8 錨框 9 YOLO算法 10 用u-net進行語義分割 11 轉置卷積 12 u-net 結構靈感 1 目標定位 你已經對圖片分類有所了解。例如通過這張圖片可以識…

es7.x es的高亮與solr高亮查詢的對比對比說明

一 solr&es高亮1.1 solr與es高亮功能解釋說明&#xff1a;1)高亮配置&#xff1a;fragmentSize(1000) 設置片段長度numOfFragments(1) 指定返回的片段數量preTags() 和 postTags() 設置高亮標記2)字段處理差異&#xff1a;在 ES 中&#xff0c;使用 matchQuery 而非 termQ…

DSP音頻算法工程師技能2

一、核心知識準備1. 算法原理3A算法&#xff08;AGC自動增益控制/AEC回聲消除/ANS降噪&#xff09;&#xff1a;掌握AEC的NLMS/雙講檢測原理&#xff0c;ANS的譜減法/維納濾波&#xff0c;AGC的壓縮曲線設計。熟悉Speex/WebRTC等開源實現。EQ音效&#xff1a;IIR/FIR濾波器設計…

第4章-04-用WebDriver頁面元素操作

??作者簡介,黑夜開發者,CSDN領軍人物,全棧領域優質創作者?,CSDN博客專家,阿里云社區專家博主,2023年CSDN全站百大博主。 ??數年電商行業從業經驗,歷任核心研發工程師,項目技術負責人。 ??本文已收錄于專欄:Web爬蟲入門與實戰精講,后續完整更新內容如下。 文章…

【計算機視覺與深度學習實戰】04基于K-Means聚類的圖像分割系統設計與實現

摘要 圖像分割作為計算機視覺領域的基礎任務,在目標檢測、醫學影像分析、自動駕駛等眾多應用中發揮著關鍵作用。本文基于K-Means聚類算法設計并實現了一個完整的圖像分割系統,該系統集成了多種顏色空間轉換、自定義初始化策略、空間特征融合等先進技術。通過Python和Tkinter…

Android Studio常用知識總結

一、運行方式1.運行 (Run)當您選擇“運行”時&#xff0c;Android Studio 會編譯您的應用并將其安裝到目標設備或模擬器上。這通常用于&#xff1a;快速部署: 您只想看看應用是否能正常啟動并運行&#xff0c;或者進行一些基礎的用戶界面測試。性能測試: 在正常運行模式下測試應…

設計模式筆記_行為型_訪問者模式

1. 訪問者模式介紹訪問者模式&#xff08;Visitor Pattern&#xff09;是一種行為型設計模式&#xff0c;它允許你在不改變對象結構的前提下&#xff0c;定義作用于這些對象的新操作。訪問者模式將操作的邏輯從對象結構中分離出來&#xff0c;使得你可以在運行時動態地添加新的…

數學建模 14 中心對數比變換

用途&#xff1a;是處理成分數據的核心預處理方法&#xff0c;核心目標是解決成分數據的和為常數100% &#xff0c; 導致的維度冗余&#xff0c;非線性相關問題。使得數據滿足傳統的統計/建模方法&#xff1b;舉例子&#xff1a;食品比例中 面粉(50%),糖(30%),水(20%)原理&…

【C語言強化訓練16天】--從基礎到進階的蛻變之旅:Day7

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

污水處理行業的 “智能革命”:邊緣計算網關如何重塑傳統運維模式?

污水處理行業的 “智能革命”&#xff1a;邊緣計算網關如何重塑傳統運維模式&#xff1f;在污水處理這一關乎生態環境與可持續發展的關鍵領域&#xff0c;藍蜂網關正憑借其先進技術與強大功能&#xff0c;發揮著無可替代的重要作用。作為工業級物聯網解決方案的核心組件&#x…

ASP.NET Core 中的多租戶 SaaS 應用程序

介紹隨著軟件即服務 (SaaS) 持續主導技術領域&#xff0c;構建能夠高效地從單一代碼庫服務于多位客戶&#xff08;租戶&#xff09;的應用程序變得至關重要。ASP.NET Core 憑借其模塊化和可擴展的架構&#xff0c;是實現多租戶 SaaS 應用程序的強大框架。本文將指導您了解構建多…

JUC之CompletableFuture【中】

文章目錄四、CompletableFuture基本使用4.1 默認線程池、無返回值4.2 默認線程池、有返回值4.3 自定義線程池、有返回值4.4 CompletableFuture 獲取結果五、對結果進行處理5.1 方法說明5.2 示例5.3 thenApply vs thenApplyAsync5.3.1 核心區別: 執行線程不同5.3.2 thenApply: 同…