String常用操作

来源:https://www.cnblogs.com/fjfsu/archive/2018/09/04/9582189.html
-Advertisement-
Play Games

常量池: 字元串一旦被初始化就不會被改變 這段代碼看上去s的值是被改變了的,實際上123就是一個對象,他存在於常量池中,abc也是一個對象,s的值實際上是指向123或者abc的地址。 所以當我們使用String s="123";來定義字元串的時候,會先查看常量池中是否有123,有就直接賦值123的地 ...


常量池:

字元串一旦被初始化就不會被改變

        String s="123";
        s="abc";
        System.out.print(s);

這段代碼看上去s的值是被改變了的,實際上123就是一個對象,他存在於常量池中,abc也是一個對象,s的值實際上是指向123或者abc的地址。

所以當我們使用String s="123";來定義字元串的時候,會先查看常量池中是否有123,有就直接賦值123的地址,如果沒有就創建123。

 

 

   1     String s="123";
   2     String s1=new String("123");
   3     System.out.println(s==s1);
   4     System.out.print(s.equals(s1));
結果:

    false

    true

 

2中,實際上是創建了兩個對象,一個new,一個堆記憶體中。equals本來和==一樣是比較地址值得,但是String類重寫了equals方法,比較的是內容。 

獲取

1.1獲取字元串中字元的長度(個數)

int length()

1.2根據位置獲取字元 

char charAt(int index)

1.3根據字元(子串)獲取其在字元串中第一次出現的位置    

char indexOf(int ch)
char indexOf (int ch,int fromIndex)從指定位置進行查找
char indexOf(String str)
char indexOf (String str,int fromIndex)

 上面的是從前向後找,下麵的是從後向前找

char lastIndexOf(int ch)
char lastIndexOf (int ch,int fromIndex)從指定位置進行查找
char lastIndexOf(String str)
char lastIndexOf (String str,int fromIndex)

 1.4獲取字元串中的子串

String substring(int beginIndex,int endInedx)包含befin不包含end
String substring(int beginIndex)

轉換

1.1將字元串變成字元串數組

String[] split(String regex) 這裡的切割點有時會涉及到正則表達式,所以要用\將特殊字元轉化成普通字元。註意\.也是正則規則中的一部分

public class Text { public static void main(String[] args){ String s="張三.李四.王五"; String[] arr=s.split("\\."); for(int i=0;i<arr.length;i++) System.out.println(arr[i]); } }

1.2將字元串變成字元數組

char[] toCharArray();

1.3將字元串變成位元組數組

byte[] getBytes();

1.4將字元串中的字母轉換大小寫

String toUpperCase();
String toLowerCase();

1.5將字元串中的內容進行互換

String replace(String oldst,String newst)
String replace(char oldch,char newch)

1.6將字元串兩端的空格去掉

String trim();

1.7將字元串進行連接

String concat(String);

判斷

1.1比較兩個字元串是否相同

boolean equals(anObject)
boolean equalsIgnoreCase(anotherString)不區分大小寫

1.2判斷字元串中是否包含指定字元串

boolean contains(String str)

1.3字元串是否以指定字元串開頭(結尾)

boolean startsWith(String)
boolean endsWith(String)

1.4比較兩個字元串的字典順序大小

int compareTo(anotherString);
int compareToIgnoreCase(anotherString)不區分大小寫

 intern

  • 當調用intern方法時,如果池已經包含與equals(Object)方法確定的相當於此String對象的字元串,則返回來自池的字元串。 否則,此String對象將添加到池中,並返回對此String對象的引用。

    (實際上就是看對象的值123在池當中有沒有,如果沒有那我就在池中創建一個,如果有那我就直接拿來用)

    public class Text {
        public static void main(String[] args){
            String s=new String("123");
            String s1=s.intern();
            String s2=s1.intern();
            System.out.println(s==s1);    
            System.out.println(s1==s2);    
        }
    }
    結果
    false
    true

StringBuffer

就是字元串緩衝區,用於存儲數據的容器

特點:1長度是可變的

           2可以存儲不同數據類型

   3最終要轉成字元串進行使用

   4可對字元串進行修改

 

既然是個容器那麼它具備什麼功能呢?

1添加

StringBuffer append(data)在結尾進行添加
StringBuffer insert(index,data)在指定位置插入
public class Text {
    public static void main(String[] args){
        StringBuffer s=new StringBuffer();
        s.append("1").append("2").append("b");
        s.insert(1, "a");
        System.out.println(s);        
    }
}
結果:1a2b

2刪除

StringBuffer delete(start,end);包含頭不包含為尾
StringBuffer deleteCharAt(int index);刪除指定位置的元素

3查找

char charAt(index)返回指定位置字元
int indexOf(str);返回子串第一次出現的位置
int kastIndexOf(str)從字元串末尾開始查詢

4修改

StringBuffer replace(start, end, str);
void setCharAt(index, ch);只修改一個字元。註意它沒有返回值類型

5

StringBuffer reverse();將字元串頭尾進行對調

 

 new StringBuffer()初始化的預設長度為16 

 new StringBuffer(index)可以指定其初始化的長度(如果可以確定數據的大小,最好使用這個,可以避免開闢空間和進行運算)

 StringBuilder

jdk1.5以後出現了功能和StringBuffer一模一樣的對象,即Stringbuilder

不同的是:

Stringbuilder是線程不同步的,通常用於單線程,效率高,因為不用每次都判斷鎖。

StringBuffer線程同步,通常用於多線程,安全。(如果刪除和添加同時進行了,那麼就會造成安全隱患)

    Object lock;
        public StringBuffer append(int x){
            synchronized(lock){
                
            }
        }
        public StringBuffer delete(int start,int end){
            synchronized(lock){
                
            }
        }

JDK升級的目的:

1簡化書寫

2提高效率

3增加安全性


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 幾米圈官網8個頁麵包括路由的配置在vue腳手架中進行開發,主要使用bootstrap完成頁面的佈局,amazeui完成動畫效果。vue腳手架單頁面開發路由切換其他子頁面主要遇到導入js和css的問題。在全局導入js插件時應該使用npm下載當前插件,在局部導入時,如果涉及到對現有界面中dom元素事件的 ...
  • 需求: 利用MySql資料庫結合前端技術完成用戶的註冊(要求不使用Web服務技術),所以 Demo採用Socket技術實現Web通信. 第一部分:資料庫創建 資料庫採用mysql 5.7.18, 資料庫名稱為MyUser, 內部有一張表 user.欄位有 Id,UserName,Psd,Tel 第二 ...
  • 1、event.stopPropagation 停止事件的傳播,阻止它被分配到其它Dom節點。但是不能阻止同一Dom節點上的其它事件句柄被調用。 2、event.preventDefault 阻止與事件關聯的預設動作。 ...
  • 本文轉自:http://developer.51cto.com/art/201709/552085.htm 本文轉自:https://www.cnblogs.com/stulzq/p/8573828.html 微服務架構現在是談到企業應用架構時必聊的話題,微服務之所以火熱也是因為相對之前的應用開發方 ...
  • 不管乾什麼,設定一個目標,針對一個目標有一個核心戰略,並堅決的執行核心戰略是取得勝利的不二法寶。 舉個慄子🌰: 三國三分天下。魏蜀吳都有自己的階段性核心戰略。魏國曹操的戰略是挾天子以令諸侯。東吳孫權的戰略是依靠天險,有水做天然屏障,孫吳水師一家獨大。蜀國的戰略是東聯孫權,北拒曹操。 魏國和吳國的執 ...
  • 前言 剛從事開發那段時間不習慣輸出日誌,認為那是無用功,徒增代碼量,總認為自己的代碼無懈可擊;老大的叮囑、強調也都視為耳旁風,最終導致的結果是我加班排查問題,花的時間還挺長的,要復現問題、排查問題等,幸虧那是公司內部員工用的系統,時間長一點也沒什麼大問題,但是如果是針對客戶的,時間就代表很多東西了, ...
  • c++ move關鍵字 move的由來:在 c++11 以前存在一個有趣的現象:T& 指向 lvalue (左傳引用), const T& 既可以指向 lvalue 也可以指向 rvalue。但卻沒有一種引用類型,可以限製為只指向 rvalue。 就這麼簡單!你甚至可以暫時想像它的原型是這樣的(當然 ...
  • 定義用戶去銀行存錢,每次存100,存3次 餓漢式 懶漢式 多線程 在同一時間,做多件事情. 創建線程的方法 繼承類Thread並重寫run(),run()稱為線程體;用這種方法定義的類不能再繼承其他類。 class FirstThread extends Thread{ public void ru ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...