7.14 Java基礎|String 和StringBuilder

補充注意:

1、StringBuilder?的?append?方法可以接收整數類型的參數,并將其自動轉換為字符串后添加到?StringBuilder?中

2、該方法適用于所有基本數據類型(如?longdouble?等)和對象(通過調用其?toString()?方法)

?

一、String 類基礎

  1. 創建方式

    • String a = new String();?→ 創建空字符串對象(等價于""
    • String b = new String("neirong");?→ 基于已有字符串創建對象(不推薦,直接用String b = "neirong";更高效)
  2. 字符串不可變性

    • String 對象創建后內容不可變,所有操作(如concat)都會返回新字符串

二、String 常用方法

  1. 字符操作

    java

    char c = b.charAt(4); // 返回索引4對應的字符'r'(索引從0開始)
    char[] ch = str.toCharArray(); // 轉換為字符數組
    
  2. 比較方法

    java

    int t = str.compareTo("code"); // 按字典序比較:相等返回0
    boolean boo = str.equals("code"); // 內容比較:true
    
  3. 拼接與截取

    java

    String str1 = str.concat("sss"); // 等價于 str + "sss" → "codesss"
    String sub = str.substring(2, 4); // 左閉右開區間 → "de"
    
  4. 查找定位

    java

    int ind = str.indexOf("de"); // 返回子串首次出現位置:2
    
  5. 狀態判斷

    java

    int len = str.length(); // 返回字符串長度:4
    boolean flag = str.isEmpty(); // 判斷是否為空:false
    

三、StringBuilder?類?

  1. 核心特點

    • 可變字符序列,適合頻繁修改場景(如循環拼接)
    • 非線程安全,性能優于StringBuffer
  2. 常用操作

    java

    StringBuilder stro = new StringBuilder();
    stro.append("absc").append("efg"); // 鏈式調用 → "abscdefg"
    stro.reverse(); // 反轉內容 → "gfedcba"
    
  3. 與 String 的轉換

    java

    String s = stro.toString(); // 轉換為String對象
    

四、關鍵對比

特性StringStringBuilder
可變性不可變可變
線程安全性安全(不可變)不安全
性能(循環拼接)低(每次生成新對象)高(直接修改內部數組)
適用場景少量操作、常量定義大量動態拼接

五、最佳實踐

  1. 優先使用字面量創建字符串

    java

    String s = "hello"; // 比new String("hello")更高效
    
  2. 循環拼接用 StringBuilder

    java

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 1000; i++) {sb.append(i); // 避免使用String的+操作符
    }
    
  3. 謹慎使用substring

    • 在 Java 8 及以前,substring可能導致內存泄漏(保留原字符串引用)
    • Java 9 + 已修復此問題(改用復制機制)

六、常見誤區

  1. compareToequals的區別

    • compareTo返回比較結果的數值(-1/0/1)
    • equals返回布爾值
  2. isEmptynull的區別

    java

    String s = "";
    s.isEmpty(); // true
    s == null;   // false
    

  3. StringBuilderappend返回值

    java

    StringBuilder sb = new StringBuilder();
    sb.append("a").append("b"); // 返回當前對象,無需接收返回值

?我的代碼:

package day714;public class string {public static void main(String[] args) {String a=new String();String b=new String("neirong");System.out.println(a);System.out.println(b);char c=b.charAt(4);System.out.println(c);String str="code";int t=str.compareTo("code");System.out.println(t);String str1=str.concat("sss");System.out.println(str1);boolean boo=str.equals("code");System.out.println(boo);int ind=str.indexOf("de");System.out.println(ind);int len=str.length();System.out.println(len);String sub=str.substring(2,4);System.out.println(sub);char[] ch=str.toCharArray();boolean flag=str.isEmpty();System.out.println(flag);StringBuilder stro=new StringBuilder();stro.append("absc");System.out.println(stro);stro.append("efg");System.out.println(stro);StringBuilder stroo=new StringBuilder();stroo=stro.reverse();System.out.println(stroo);}
}
/*********************String 常用方法********************1、char charAt(int index);返回指定索引字符(從0)*2、int compareTo(Object o);字符串與o比較,大返回1,等0,小-1*3、String concat(String str);指定字符串鏈接到指定字符串的結尾*4、boolean equals(String string1);將此字符串與指定的字符串比較*5、int indexOf(String str)返回a穿再b串中第一次出現的位置*6、int length();返回此字符串的長度*7、String substring(int beginIndex,int endIndex);左閉右開*8、char[] toCharArray();//字符串轉換成字符數組*9、boolean isEmpty();//判斷字符串是否為空******************************************************/
/**************StringBuilder常用方法************************ StringBuilder str=new StringBuilder();* 這里要特別記清楚append()和reverse()是StringBuilder 類** 1、void append(Object obj)   //尾部加上字符串obj* 2、int indexOf(String str)   //同上* 3、StringBuilder reverse()	//反轉* 4、boolean isEmpty()			//判空同上* 5、int charAt(int index)	* ********************************************************/

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

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

相關文章

React 第六十九節 Router中renderMatches的使用詳解及注意事項

前言 renderMatches 是 React Router 的一個高級實用函數&#xff0c;用于根據路由匹配結果渲染對應的組件樹。它提供了對路由渲染過程的底層控制能力&#xff0c;特別適用于自定義路由渲染邏輯的場景。 一、基本概念和功能 renderMatches 函數的作用是將路由匹配結果轉換為 Re…

esp8266-01S實現PPM波形

esp8266-01雖然小眾&#xff0c;但是功能可不能少。因航模需要讓ESP8266-01生成PPM波形。#include <ESP8266WiFi.h> #include <Ticker.h> // 僅用于延時函數替代#define PPM_PIN 2 // 使用 GPIO2 (需斷開串口上傳時的連接) #define CHANNELS 4 // PPM通道數量…

使用 pytest 測試框架構建自動化測試套件之一

pytest 是一個非常靈活且強大的測試框架&#xff0c;它支持簡單的單元測試到復雜的功能測試。顯著特點是其簡潔的語法&#xff0c;可以無需繼承 TestCase 類直接使用函數來編寫測試用例&#xff0c;并通過 assert語句 進行斷言。還支持參數化測試、豐富的插件系統。 pytest自動…

nacos docker 配置

docker.io/nacos 項目中國可用鏡像列表 | 高速可靠的 Docker 鏡像資源 1、Docker 拉取鏡像 docker pull nacos/nacos-server:v2.1.0 2、創建宿主機掛載目錄 mkdir -p /mydata/nacos/logs/ mkdir -p /mydata/nacos/conf/ AI寫代碼 3、啟動nacos并復制文件到宿主機&#xff0…

Django 模板(Template)

1. 模板簡介 作為 Web 開發框架,Django 提供了模板,可以很便利的動態生成 HTML。模版系統致力于表達外觀,而不是程序邏輯。 模板的設計實現了業務邏輯(view)與顯示內容(template)的分離,一個視圖可以使用任意一個模板,一個模板可以供多個視圖使用。 模板包含: HTM…

Word 文字編輯狀態下按回車換行后是非正文格式

在Word里編輯時&#xff0c;按回車后新段落突然變成標題1、標題2這類格式&#xff0c;不再是正文樣式&#xff0c;這通常是因為「正文」的樣式設置出了問題——可能被默認設置成“后續段落自動應用標題1/標題2格式”了。 修改方法很簡單&#xff1a; 找到并打開「正文」樣式的修…

PySide6 UI 靈活性:QToolBar 的浮動與停靠及 QSplitter 的可調整面板

PySide6 UI 靈活性&#xff1a;QToolBar 的浮動與停靠及 QSplitter 的可調整面板 在現代桌面應用程序開發中&#xff0c;提供靈活且用戶友好的界面至關重要。PySide6&#xff08;Qt for Python&#xff09;提供了強大的工具來構建這樣的界面。本文將深入探討兩個關鍵的 PySide6…

B4016 樹的直徑

B4016 樹的直徑 - 洛谷 題目描述 給定一棵 n 個結點的樹&#xff0c;樹沒有邊權。請求出樹的直徑是多少&#xff0c;即樹上最長的不重復經過一個點的路徑長度是多少。 輸入格式 第一行輸入一個正整數 n&#xff0c;表示結點個數。 第二行開始&#xff0c;往下一共 n - 1 行…

【一維 前綴和+差分】

一、一維前綴和 1.1 定義 給定一個數組 a[1..n]&#xff0c;其前綴和數組 pre[1..n] 定義為&#xff1a; pre[i]a[1]a[2]?a[i] pre[i] a[1] a[2] \dots a[i] pre[i]a[1]a[2]?a[i] 即 pre[i] 表示原數組從第 1 項到第 i 項的和。 1.2 構建 int a[N], pre[N]; for (int i …

Spring Boot 雙數據源配置

文章目錄什么是雙數據源&#xff1f;為什么需要雙數據源&#xff1f;核心實現原理完整示例注意什么是雙數據源&#xff1f; 雙數據源是指在一個應用程序中同時配置和使用兩個不同的數據庫連接。比如&#xff1a; 一個連接訂單數據庫&#xff0c;處理業務數據一個連接用戶中心…

【Java】【力扣】102.二叉樹層序遍歷

思路一個輔助隊列&#xff08;初始化隊列&#xff1a;根節點入隊&#xff09;一個節點 出隊&#xff0c;他的左右孩子入隊循環 直到隊列為空舉例代碼public List<List<Integer>> levelOrder(TreeNode root) {if (rootnull){return new ArrayList<List<Intege…

為什么有些PDF無法復制文字?原理分析與解決方案

在日常辦公和學習中&#xff0c;我們經常會從PDF文件中復制文字&#xff0c;用于編輯、引用、整理筆記。但你是否也遇到過這樣的情況&#xff1a;有些PDF中的文字根本無法選中&#xff0c;更無法復制粘貼&#xff1f; 看起來像是“文字”&#xff0c;但操作上卻完全無效——這…

LabVIEW瀏覽器ActiveX事件交互

?程序圍繞 WebBrowser ActiveX 控件&#xff0c;借 “Reg Event Callback” 注冊標題變更回調&#xff0c;“Callback - Title Change.vi” 處理標題數據&#xff0c;“Monitor...” 響應 URL 變更&#xff0c;“Unregister...” 清理資源&#xff0c;實現瀏覽器事件交互與管控…

C++后端面試八股文

一、C 語言基礎與底層原理請解釋 new / delete 和 malloc / free 的區別和聯系&#xff0c;以及使用它們時需要注意什么new 和 delete 是C的??運算符&#xff08;Operator&#xff09;??。這意味著它們可以被類&#xff08;通過 operator new 和 operator delete&#xff0…

基礎分類模型及回歸簡介(一)

一、先搞懂兩個核心任務&#xff1a;分類和回歸咱們生活中總遇到要 “判斷” 或 “預測” 的事&#xff1a;比如看到一個水果&#xff0c;判斷是蘋果還是橘子 —— 這就是分類&#xff08;結果是 “類別”&#xff09;&#xff1b;比如根據西瓜的大小、顏色&#xff0c;猜它能賣…

【LeetCode 熱題 100】114. 二叉樹展開為鏈表——(解法二)分治

Problem: 114. 二叉樹展開為鏈表 給你二叉樹的根結點 root &#xff0c;請你將它展開為一個單鏈表&#xff1a; 展開后的單鏈表應該同樣使用 TreeNode &#xff0c;其中 right 子指針指向鏈表中下一個結點&#xff0c;而左子指針始終為 null 。 展開后的單鏈表應該與二叉樹 先序…

【WPF】WPF 自定義控件 實戰詳解,含命令實現

&#x1f9e9;《WPF 自定義控件》實戰詳解本文將圍繞如何編寫一個自定義控件&#xff08;如帶右鍵菜單的圖片控件 ImageView&#xff09;&#xff0c;逐步講解其定義、命令綁定與 ContextMenu 中常見的語法技巧。&#x1f9f1; 一、創建一個 WPF 自定義控件的步驟 WPF 中自定義…

Flink 2.0 DataStream算子全景

在實時流處理中&#xff0c;Apache Flink的DataStream API算子是構建流處理 pipeline 的基礎單元。本文基于Flink 2.0&#xff0c;聚焦算子的核心概念、分類及高級特性。 一、算子核心概念&#xff1a;流處理的"原子操作 1. 數據流拓撲&#xff08;Stream Topology&#x…

Flask 入門到實戰(2):使用 SQLAlchemy 打造可持久化的數據層

Flask 入門到實戰&#xff1a;使用 SQLAlchemy 打造可持久化的數據層一、前言&#xff1a;為什么用 Flask-SQLAlchemy&#xff1f; 在 Python Web 開發中&#xff0c;操作數據庫的方式主要有兩種&#xff1a; 直接寫 SQL&#xff08;繁瑣且難維護&#xff09;使用 ORM&#xff…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | GithubProfies(GitHub 個人資料)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— GithubProfies組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script setup…