【Java】String類API

創建字符串

字符串字面量"Hello"高效,常量池復用常見、簡單的字符串創建
new 關鍵字new String("Hello")每次創建新對象,性能開銷較高顯式創建新對象
字符數組new String(char[])轉換字符數組字符數組轉字符串
StringBuilder/StringBuffersb.toString()可變字符串,高效頻繁修改字符串
String.formatString.format()動態格式化動態內容和格式輸出
String.valueOfString.valueOf()基本類型和對象轉字符串類型轉換
String.joinString.join()多字符串高效拼接多個字符串拼接
concat 方法str1.concat(str2)簡單拼接簡單場景拼接
substringstr.substring(0, 5)提取子串提取部分字符串
String.internstr.intern()常量池優化內存內存優化
字節數組new String(byte[])解碼字節數組網絡/文件數據轉換為字符串

1.字符串字面量

String str = "Hello";

特點

  • 字符串字面量存儲在 字符串常量池 中。
  • 如果常量池中已經存在相同的字符串,則不會創建新對象,直接返回池中已有的引用。

適用場景

  • 用于創建重復使用的常量字符串

2.使用new關鍵字

String str = new String("Hello");

特點

  • 如果字符串常量池沒有"Hello"字面量,會先創建一個,然后每次new都會在堆內存中創建一個新的String對象,內容相同的都會引入字符串常量池中的字面量
  • 不推薦直接使用new創建字符串,除非明確需要

適用場景

  • 顯式要求在堆內存中創建獨立的字符串對象。

3.字節數組

byte[] bytes = "黃小桃".getBytes();
// byte[] bytes = {72, 101, 108, 108, 111}; // ASCII for "Hello"
String string = new String(bytes);
System.out.println(string);

特點

  • 將字節數組解碼為字符串。
  • 默認使用平臺的字符集,也可指定字符集(如 UTF-8)。

適用場景

  • 從網絡、文件中讀取的字節數據轉換為字符串。

4.字符數組

char[] chars = {'H', 'e', 'l', 'l', 'o'};
String str = new String(chars);

特點

  • 將字符數組轉換為字符串。
  • 不會將字符數組的內容直接放入常量池,而是在堆中創建一個字符串對象

適用場景

  • 字符數組需要拼接或轉為字符串時

5.使用StringBuilder或StringBuffer

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
String str = sb.toString();

特點

  • 適合頻繁修改字符串的場景(如拼接、刪除等操作)。
  • StringBuilder 非線程安全StringBuffer 是線程安全的。

適用場景

  • 需要高效地構建字符串,避免頻繁創建新對象。

6.使用String.format

        String str = String.format("Hello,%s!", "World");System.out.println(str); // Hello,World!

特點

  • 支持格式化操作,類似于 printf 的功能。
  • 可指定格式控制符(如 %d, %s

%s引用字符串

%d引用整型

適用場景

  • 動態格式化字符串。

7.String.valueOf()轉型

int num = 42;
String str = String.valueOf(num);

特點

  • 將基本類型(如 int, double)或對象轉為字符串。
  • 如果傳入的是 null,返回 "null"

適用場景

  • 將非字符串的基本類型轉換為字符串。

8.使用String.join()

特點

  • Java 8 引入的工具方法,用于高效拼接字符串。
  • 可以指定分隔符,拼接多個字符串。

適用場景

  • 多個字符串的高效拼接。

9.使用concat方法

String str1 = "Hello";
String str2 = " World";
String str = str1.concat(str2);

特點

  • 直接拼接兩個字符串,功能類似于 +
  • + 不同,concat 只能拼接字符串,不能拼接其他類型。

適用場景

  • 簡單的字符串拼接。

10.使用substring

String original = "Hello, World!";
String subStr = original.substring(0, 5); // "Hello"

特點

  • 從原字符串提取子串,生成新的字符串。
  • 新字符串仍然是不可變的。

適用場景

  • 提取部分字符串。

11.使用String.intern()

String str = new String("Hello").intern();

特點

  • 將字符串對象放入字符串常量池,如果池中已存在相同內容的字符串,則返回池中的引用。
  • 用于減少內存占用。

適用場景

  • 手動優化內存使用,減少重復字符串對象。

12.使用Arrays.asListString.join

String str = String.join(", ", Arrays.asList("Apple", "Banana", "Cherry"));

特點

  • 利用 String.joinList 數據實現快速拼接。

適用場景

  • 列表中的數據拼接為字符串。

字符串基本方法

1.獲取字符串長度

String str = "Hello";
int length = str.length(); // 5

2.獲取字符

String str = "Hello";
char c = str.charAt(1); // 'e'

3.查找子串或字符

String str = "Hello, World!";
int index = str.indexOf("World"); // 7
int lastIndex = str.lastIndexOf('o'); // 8
boolean contains = str.contains("Hello"); // true

4.字符串比較

String str1 = "apple";
String str2 = "banana";boolean isEqual = str1.equals(str2); // false
boolean ignoreCase = str1.equalsIgnoreCase("APPLE"); // true
int compare = str1.compareTo(str2); // 按字典序比較,返回負值表示 str1 < str2

5.判斷前綴或后綴

String str = "hello.java";
boolean startsWith = str.startsWith("hello"); // true
boolean endsWith = str.endsWith(".java"); // true

6.判斷是否為空

String str = "";
boolean isEmpty = str.isEmpty(); // true

7.字符串截取

String str = "Hello, World!";
String subStr1 = str.substring(0, 5); // "Hello"
String subStr2 = str.substring(7);    // "World!"

8.字符串替換

String str = "Hello, World!";
String replaced = str.replace("World", "Java"); // "Hello, Java!"
String replacedAll = str.replaceAll("\\s", "_"); // 用正則替換,"Hello,_World!"

9.刪除前后空格

String str = "   Hello, World!   ";
String trimmed = str.trim(); // "Hello, World!"

10.分割字符串

String str = "Apple,Banana,Cherry";
String[] fruits = str.split(","); // ["Apple", "Banana", "Cherry"]

11.拼接字符串

String joined = String.join("-", "Apple", "Banana", "Cherry"); // "Apple-Banana-Cherry"

12.轉換大小寫

String str = "Hello";
String upper = str.toUpperCase(); // "HELLO"
String lower = str.toLowerCase(); // "hello"

13.轉換為字符數組

String str = "Hello";
char[] chars = str.toCharArray(); // ['H', 'e', 'l', 'l', 'o']

14.轉換為字節數組

String str = "Hello";
byte[] bytes = str.getBytes(); // 按默認編碼轉換

15.格式化字符串

%s引用字符串

%d引用整型

String formatted = String.format("Hello, %s! You have %d messages.", "John", 5);
// 輸出: "Hello, John! You have 5 messages."

16.判斷字符串是否匹配正則

String str = "123abc";
boolean matches = str.matches("\\d+"); // false(因為包含字母)

17.判斷是否為空或僅包含空白字符

String str = "   ";
boolean isBlank = str.trim().isEmpty(); // true

18.字符串構建

StringBuilder 是 Java 中推薦的可變字符串操作類。

但是線程不安全,所以多線程環境下最好用StringBuffer

StringBuilder sb = new StringBuilder("Hello");
sb.append(", World!"); // 拼接字符串
sb.insert(5, " Java"); // 插入字符串
sb.delete(5, 10);      // 刪除指定范圍的字符
sb.reverse();          // 反轉字符串
System.out.println(sb.toString()); // "!dlroW ,olleH"

19.連續空格替換成單個空格

String str = "Hello    World!";
String normalized = str.replaceAll("\\s+", " "); // "Hello World!"

20.保留字符串中的數字

String str = "abc123def456";
String digits = str.replaceAll("\\D", ""); // "123456"

21.替換首尾字符

String str = "123-456-789";
String result = str.replaceFirst("^123", "XXX"); // "XXX-456-789"

22.性能優化-字符串拼接

使用 StringBuilder 代替 + 操作

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {sb.append(i).append(", ");
}
System.out.println(sb.toString());

23.使用intern()減少重復字符串

String.intern() 將字符串放入常量池,避免創建重復對象

String str1 = "Hello".intern();
String str2 = new String("Hello").intern();
System.out.println(str1 == str2); // true

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

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

相關文章

數據結構初階---二叉樹---堆

一、樹 1.樹的概念 樹是一種非線性的數據結構&#xff0c;由n(n≥0)個有限結點組成的一個有層次關系的集合。形狀類似一棵倒掛的樹&#xff0c;根朝上&#xff0c;分支向下。 根結點沒有前驅結點&#xff0c;可以有n(n≥0)個后繼結點。 其余結點被分為M個互不相交的集合&am…

CocosCreator對配置文件加密

一、加密 1.首先假設你已經將Excel表格數據導出為了json數據 2.然后可以通關nodejs對其進行xor加密 const fs require(fs);// 讀取配置文件 const path "hero_info.json"; const data fs.readFileSync(path, utf-8); const jsonObject JSON.parse(data);// XO…

學習 Dockerfile 常用指令

學習 Dockerfile 常用指令 在構建 Docker 鏡像時&#xff0c;Dockerfile 文件是一份至關重要的配置文件&#xff0c;它定義了構建鏡像的所有步驟。通過在 Dockerfile 中使用不同的指令&#xff08;命令&#xff09;&#xff0c;我們可以控制鏡像的構建過程、設置環境、指定執行…

D95【python 接口自動化學習】- pytest進階之fixture用法

day95 pytest的fixture詳解&#xff08;二&#xff09; 學習日期&#xff1a;20241210 學習目標&#xff1a;pytest基礎用法 -- pytest的fixture詳解&#xff08;二&#xff09; 學習筆記&#xff1a; fixture(autouseTrue) func的autouse是TRUE時&#xff0c;所有函數方法…

C語言 字符串輸入輸出函數、scanf(“%[^\n]“,)可輸入空格 、fgets刪除換行符

字符串輸入函數&#xff1a; scanf&#xff08;"%s"&#xff0c;數組名&#xff09; gets&#xff08;數組名&#xff09; fgets&#xff08;&#xff09; --- 文件流輸入函數 函數原型&#xff1a; int scanf( const char *format, ...…

深度學習camp-第J4周:ResNet與DenseNet結合探索

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 本周任務&#xff1a; 探索ResNet和DenseNet的結合可能性本周任務較難&#xff0c;我們在chatGPT的幫助下完成 一、網絡的構建 設計一種結合 ResNet 和 Den…

「iOS」通過CoreLocation Framework深入了解MVC架構

「iOS」通過CoreLocation Framework重新了解多界面傳值以及MVC架構 文章目錄 「iOS」通過CoreLocation Framework重新了解多界面傳值以及MVC架構前言CoreLocation了解根據需求建模設計屬性方法設計協議傳值Block傳值KVONotification通知方式 總結參考文章 前言 在這個學期的前…

Debezium系列之:使用Debezium采集oceanbase數據庫

Debezium系列之:使用Debezium采集oceanbase數據庫 一、oceanbase數據庫二、安裝OceanBase三、安裝oblogproxy四、基于Docker的簡單采集案例五、生產實際應用案例Debezium 是一個開源的分布式平臺,用于監控數據庫變化和捕捉數據變動事件,并以事件流的形式導出到各種消費者。D…

線程sleep的時候會釋放鎖嗎

來看一段代碼&#xff1a; void task1(mutex &m) {cout << "thread 1 init..." << endl;{std::unique_lock<mutex> lock(m);cout << "thread 1 getLock" << endl;sleep(5);}cout << "thread 1 freeLock&quo…

wordpress建站--如何用Let‘s Encrypt給網站添加免費ssl證書,支持https訪問

本文首發網站&#xff1a;https://www.click234.com 默認情況下我們的網站是http訪問&#xff0c;為了增加訪問安全性&#xff0c;我們需要添加ssl證書&#xff0c;支持采用https方式訪問&#xff0c;今天我們來看下怎么創建免費的ssl證書--Lets Encrypt 使用 Certbot 自動化工…

青少年編程與數學 02-004 Go語言Web編程 02課題、依賴管理

青少年編程與數學 02-004 Go語言Web編程 02課題、依賴管理 課題摘要:一、項目結構各目錄說明&#xff1a; 二、依賴項三、依賴管理任務四、依賴管理步驟1. 初始化Go Modules項目2. 添加依賴3. 指定依賴版本4. 更新依賴5. 清理未使用的依賴6. 離線工作7. 模塊隔離8. 可重現構建 …

Debezium OracleConnection 分析

Debezium OracleConnection 分析 目錄 1. 概述2. 核心功能3. 實現分析4. 使用場景5. 示例分析6. 最佳實踐7. 總結1. 概述 OracleConnection 是 Debezium Oracle 連接器中的數據庫連接管理組件,主要負責: 數據庫連接的建立和管理事務控制查詢執行元數據操作LogMiner 會話管理…

【每日一練 基礎題】[藍橋杯 2022 省 A] 求和

[藍橋杯 2022 省 A] 求和 暴力破解會超時,用因式分解的平方差公式 a2 2abb2(a)2 a-2abb2(a-b)2 輸出整數((a1a2a3…an)-a1-a2-a3-…-an)/2 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);l…

ArrayList源碼分析、擴容機制面試題,數組和List的相互轉換,ArrayList與LinkedList的區別

目錄 1.java集合框架體系 2. 前置知識-數組 2.1 數組 2.1.1 定義&#xff1a; 2.1.2 數組如何獲取其他元素的地址值&#xff1f;&#xff08;尋址公式&#xff09; 2.1.3 為什么數組索引從0開始呢&#xff1f;從1開始不行嗎&#xff1f; 3. ArrayList 3.1 ArrayList和和…

【C++】- 掌握STL List類:帶你探索雙向鏈表的魅力

文章目錄 前言&#xff1a;一.list的介紹及使用1. list的介紹2. list的使用2.1 list的構造2.2 list iterator的使用2.3 list capacity2.4 list element access2.5 list modi?ers2.6 list的迭代器失效 二.list的模擬實現1. list的節點2. list的成員變量3.list迭代器相關問題3.1…

Docker--Docker Container(容器) 之容器實戰

對docker容器的前兩篇文章 Docker–Docker Container(容器) 之 操作實例 Docker–Docker Container(容器&#xff09; Mysql容器化安裝 我們可以先在Docker Hub上查看對應的Mysql鏡像,拉取對應的鏡像&#xff1a; 拉取mysql5.7版本的鏡像&#xff1a; docker pull mysql:5.7…

ModuleNotFoundError: No module named ‘torchvision.transforms.functional_tensor‘

問題&#xff1a; 運行代碼時&#xff0c;報錯&#xff1a; … File “/home/xzy/anaconda3/envs/groundinggpt/lib/python3.10/site-packages/pytorchvideo/transforms/augmix.py”, line 6, in from pytorchvideo.transforms.augmentations import ( File “/home/xzy/anac…

【匯編語言】內中斷(二) —— 安裝自己的中斷處理程序:你也能控制0號中斷

文章目錄 前言1. 編程處理0號中斷1.1 效果演示1.2 分析所要編寫的中斷處理程序1.2.1 引發中斷1.2.2 中斷處理程序1.2.3 中斷處理程序do0應該存放的位置1.2.4 中斷向量表的修改1.2.5 總結 1.3 程序框架1.4 注意事項1.5 從CPU的角度看中斷處理程序1.6 一些問題的思考與解答 2. 安…

華為OD E卷(100分)23-連續字母長度

前言 工作了十幾年&#xff0c;從普通的研發工程師一路成長為研發經理、研發總監。臨近40歲&#xff0c;本想辭職后換一個相對穩定的工作環境一直干到老, 沒想到離職后三個多月了還沒找到工作&#xff0c;愁腸百結。為了讓自己有點事情做&#xff0c;也算提高一下自己的編程能力…

VS2019中無法跳轉定義_其中之一情況

我習慣了使用VS2019看stm的代碼&#xff1b; 遇到的問題&#xff0c;在導入代碼后&#xff0c;發現有些函數調用不能跳轉到定義&#xff1b; 問題描述步驟 1、導入代碼 2、跳轉&#xff0c;無法跳轉 1、中文路徑 2、刪除.vs文件 和網上查的都沒辦法解決 最后發現是VS不支持 …