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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...