Java基礎-String常用的方法

String常用的三種構造方法

    public static void main(String[] args) {//1.使用常量字符串構造String s1 = "1.Hello world";System.out.println(s1);//2.使用new關鍵字構造String s2 = new String("2.Hello world");System.out.println(s2);//3。使用字符數組構造char[] ch = {'H','e','l','l','o'};String s3 = new String(ch);System.out.println(s3);//輸出字符串長度System.out.println(s1.length());System.out.println("hello".length());//字符串中這種寫法也是ok的//判斷字符串長度是否為0System.out.println(s1.isEmpty());//輸出false/*String s4 = null;System.out.println(s4.isEmpty());//會報空指針錯*/String s5 = "";//字符串為0返回trueSystem.out.println(s5.isEmpty());}
  • 字符串是引用型變量,變量需要用“”一對雙引號引起來?
  • null和字符串為0不是一個概念

介紹String對象中四種常見的比較

日常中,遇到字符串比較的情況還是比較多的;"=="對于String這種引用型變量來說,比較的是一個哈希地址,是比較不了字符串中的內容是否相等的:

    public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("abc");String s3 = s1;System.out.println(s1 == s2);//falseSystem.out.println(s1 == s3);//true}

由結果可見,s1和s2是兩個不同的對象,自然的地址也不同,用"=="去比較輸出的結果固然是false,可以理解成"=="比較兩個引用變量引用的是否為同一個對象;

那么如何可以比較字符串中的內容是否相等呢?我們引出了equals()方法(按照字典序比較);在使用equals的時候,String類重寫了父類Object中equals()方法,使得可以比較字符串內的內容。

而equals方法返回的是一個布爾值,我們并不知道字符串之間的關系,所以我們引入了返回int類型的compareTo()方法,也是同樣的按照字典序比較:

    ?

    值得注意的是它的比較規則:

    1. 先按照字典次序大小比較,如果出現不等的字符,直接返回這兩個字符的大小差值
    2. s1>s2返回大于0的數字;s1=s2返回0;s1<s2返回小于0的數字
    3. 返回值是對應字符ASCII碼的差值

    那么如果我們需要忽略大小寫的比較又該用哪一個方法呢?比如我們文件名或擴展名檢查、用戶名或密碼的校驗,通常都是需要忽略大小寫來增加靈活性的,可以用compareToIgnoreCase(String str) 方法;這個方法和compareTo()的使用方法和規則是一樣的,只是它忽略大小寫去對字符串進行比較;

    字符串查找String提供的部分常用方法

    以下是部分常用的方法及使用的規則案例:

    ?

    ?

    字符串轉換

    1.其他數據類型轉換成字符串用?valueOf方法:

    ?

    2.字符串的大小寫轉換toUpperCase()&toLowerCase()

    3.?字符串轉數組用toCharArray()

    public static void main(String[] args) {//字符串轉數組String s1 = "hello world";char[] ch = s1.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.println(ch[i]);}//數組轉字符串,直接使用String轉就好String s2 = new String(ch);System.out.println(s2);}

    ?4.格式化字符串用到format()

    ?字符串的替換:

    注意:針對這種直接賦值沒有對象的字符串,在Java中會又一塊特殊的字符串常量池,存放他們;字符串常量池中不會存在兩個一樣的字符串,如果兩個字符串一樣的畫它們的地址值是一樣的;

    字符串拆分

        public static void main(String[] args) {String str = "abc def Good evening";//1.將字符串全部拆分String[] result = str.split(" ");//按空格for (String res:result){System.out.println(res);}System.out.println("==========================");//2.部分拆分String[] result2 = str.split(" ",3);for (String res2:result){System.out.println(res2);}//3.有特殊字符的字符串分割要記得加上轉義符String str2 = "192.168.1.1" ;String[] result3 = str.split("\\.") ;//轉義符for(String s: result) {System.out.println(s);}}

    ?

    1. 部分拆分時,程序不會根據字符串的長短去平均分;而是根據先后順序,分成相應的份數,后面的就不分了
    2. 有些特殊字符作為分割符可能無法正確切分, 需要加上轉義
    3. 字符"|","*","+"都得加上轉義字符,前面加上 "\\"
    4. 如果是 "\"需要拆分 ,那么就得寫成 "\\\\"
    5. 如果一個字符串中有多個分隔符,可以用"|"作為連字符

    ?以上所有涉及到修改字符串內容的操作都是創建一個新對象,改變的是新對象,而不是在原有的字符串上改動,不管是字符串轉換、格式化又或時字符串截取等等,原有的字符串還是原來的,而修改后的字符串是一個新的字符串對象;

    似上面這種修改字符串的情況,如果放在循環里面每次循環都會創建一個新的對象,產生比較多的臨時對象,對程序來說效率是比較低的,我們在使用的時候也需要盡量避免直接對String類型對象進行修改,因為String類是不能修改的,所有的修改都會創建新對象,效率非常低下。

    ?那么如果想要修改字符串中內容,該如何操作呢?于是有了StringBuilder和StringBu?er類

    StringBuilder和StringBu?er類

    StringBuilder和StringBu?er類是為了方便字符串的直接修改而產生的這兩個類大部分功能是相同的,不同的是StringBuilder會比較經常用在單線程的問題上,而StringBu?er會用更多的應用到多線程的問題上。下面是一些比較常用的方法,大部分都是和String當中的方法重合的

    String、StringBu?er、StringBuilder的區別

    • String是字符串常量不可變的,一旦創建就不能修改,任何對String的操作都會創建新的字符串對象。而StringBuilder和StringBu?er是可變的。

    • StringBu?er采用同步處理,屬于線程安全操作;而StringBuilder未采用同步處理,屬于線程不安全操作;在安全操作方面StringBu?er>StringBuilder>String

    • StringBuilder和StringBu?er類大部分功能相同


    感謝大家閱讀📚點贊👍收藏?評論?關注?

    博客主頁: 【長毛女士-CSDN博客

    水平有限,歡迎大家糾錯啦?

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

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

    相關文章

    數學建模:多目標規劃:ε約束法、 理想點法

    一、ε約束法定義ε約束法通過將部分目標函數轉化為約束條件&#xff0c;保留一個主要目標進行優化。1、選擇一個主要目標 fk?(x) 進行優化。2、其他目標 fi?(x) 轉化為約束 fi?(x)≤εi?&#xff0c;其中 εi? 是決策者設定的容許閾值。??原理????目標選擇??&…

    linux kernel struct regmap_config結構詳解

    在 Linux 內核中&#xff0c;struct regmap_config 是 ?Regmap 子系統的核心配置結構體&#xff0c;用于定義如何與底層硬件寄存器進行交互。Regmap&#xff08;Register Map&#xff09;子系統通過抽象不同總線&#xff08;如 I2C、SPI、MMIO 等&#xff09;的寄存器訪問細節…

    【Python3教程】Python3高級篇之CGI編程

    博主介紹:?全網粉絲23W+,CSDN博客專家、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域? 技術范圍:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大數據、物聯網、機器學習等設計與開發。 感興趣的可…

    docker安裝Consul筆記

    安裝過程 詳細步驟如下&#xff1a; 首先拉取Consul的Docker鏡像&#xff1a; docker pull hashicorp/consul:1.18.1創建Consul的配置文件和數據目錄&#xff1a; mkdir -p /srv/docker/consul/data mkdir -p /srv/docker/consul/config在config目錄下創建一個config.json配置文…

    .net數據脫敏

    .NET數據脫敏技術&#xff1a;保障數據安全的有效手段 在當今數字化時代&#xff0c;數據安全至關重要。尤其是涉及到用戶的敏感信息&#xff0c;如密碼、手機號碼等&#xff0c;必須采取有效的措施進行保護。數據脫敏就是這樣一種技術&#xff0c;它能夠在不影響數據可用性的…

    【openp2p】 學習2:源碼閱讀P2PNetwork和P2PTunnel

    【openp2p】 學習1:P2PApp和優秀的go跨平臺項目已經做了初步分析。閱讀原版工程,感覺工程是一個暴露內網服務端口,讓外部可以用的一個實現是一個完整的、跨平臺的可商業化的應用。感謝作者需要學習作者的設計思路工程構建 F:\GolandProjects\openp2p\core\p2pnetwork.go通常…

    網安學習NO.14

    防火墻基礎實驗 傳統防火墻配置實驗拓撲圖PC&#xff1a; ip 192.168.10.1 255.255.255.0 192.168.10.254 ip dns 114.114.114.114二層交換機 vl 10 ex int e0/0 sw mo ac sw ac vl 10 ex inr e0/1 sw tr en do sw mo tr三層交換機 vl 10 ex int g0/0 sw tr en do sw mo tr ex …

    ESP32語音喚醒

    兩種喚醒方式AfeWakeWord與EspWakeWord對比 底層技術 AfeWakeWord&#xff1a;基于ESP-IDF的AFE框架&#xff08;esp_afe_sr_iface_t&#xff09;&#xff0c;高性能模式&#xff08;AFE_MODE_HIGH_PERF&#xff09;EspWakeWord&#xff1a;基于WakeNet接口&#xff08;esp_wn_…

    借助 Wisdom SSH AI 助手,輕松安裝 CentOS 8 LNMP 環境

    打開Wisdom SSH軟件&#xff0c;在AI對話區輸入“在CentOS 8服務器安裝LNMP環境”&#xff0c;AI助手會按以下步驟分析并執行安裝&#xff1a; 安裝Nginx 分析&#xff1a;CentOS 8默認軟件源可能沒有Nginx&#xff0c;所以要先啟用Nginx官方軟件源&#xff0c;然后才能安裝Ngi…

    WD0407 40V 7A 超級肖特基二極管,應用于開關汽車工業控制

    WD0407 40V 7A 超級肖特基二極管說明? 產品概述? WD0407 是一款性能卓越的超級肖特基二極管&#xff0c;專為滿足現代電子設備對高效、可靠電源管理的需求而設計。它采用先進的半導體制造工藝&#xff0c;在諸多關鍵性能指標上表現出色&#xff0c;能夠為各類電路提供穩定、高…

    盧比危機下的金融破局:科倫坡交易所技術升級作戰圖

    &#x1f30f; 今日南亞風暴眼 印度雙重上市機制加速落地&#xff1a;印度國家證券國際交易所&#xff08;NSE IX&#xff09;與科倫坡證券交易所&#xff08;CSE&#xff09;達成技術對接協議&#xff0c;斯企可通過印度GIFT City吸引美元資本&#xff0c;交易時段覆蓋全球22小…

    upload-labs靶場通關詳解:第20關 /.繞過

    一、分析源代碼// 初始化上傳狀態標記&#xff0c;默認為false&#xff0c;即文件未上傳 $is_upload false; // 初始化消息變量&#xff0c;用于存儲錯誤信息 $msg null;// 檢查是否通過POST方式提交了表單&#xff08;點擊上傳按鈕&#xff09; if (isset($_POST[submit])) …

    企業用云狀態評估

    云部署形態及其策略規劃成熟度 單云部署&#xff1a; 主要業務負載運行在單一公有云或私有云上 多云/混合云部署 —有清晰戰略規劃與實施&#xff1a; 業務負載運行在多個云&#xff08;公有云或混合云&#xff09;上&#xff0c;并且企業擁有清晰的多云/混合云戰略規劃&#x…

    STM32G473串口通信-USART/UART配置和清除串口寄存器狀態的注意事項

    USART和UART配置的區別 如果USART使用的是異步通信&#xff0c;那么UART與USART配置基本相同。 USART配置如下:UART配置如下&#xff1a;如果USART使用的是同步通信&#xff0c;那么UART配置就有差異。首先通信雙方都是使用USART的同步通信&#xff0c;一個主機&#xff0c;一個…

    Debezium:一款基于CDC的開源數據同步工具

    Debezium 是由 Red Hat 開源的一種基于變更數據捕獲&#xff08;CDC&#xff09; 的分布式平臺&#xff0c;專為實時捕獲和傳播數據庫的變更事件而設計。Debezium 常見的使用場景包括&#xff1a; 實時數據集成&#xff1a;將數據庫變更同步到數據倉庫或數據湖&#xff0c;支撐…

    從面向對象編程語言PHP轉到Go時的一些疑惑?

    前言 1、php中面向對象編程時 與 Go中的區別&#xff1f; 2、php中最常使用laravel框架&#xff0c;不用過多關注依賴注入和反射&#xff0c;在go中又該如何使用呢&#xff1f;是 舍棄&#xff1f; 本文是一個系統化梳理&#xff0c;幫助從 語言哲學 → 依賴注入在 Go 的現狀 →…

    Vue3中使用konva插件動態制作海報以及可在畫布上隨意移動位置

    1、下載konva插件 官網地址 npm install vue-konva konva --save2、在主文件中引入&#xff0c;如main.js import VueKonva from vue-konva; app.use(VueKonva);3、組件內使用&#xff0c;我現在的布局是左側是畫布&#xff0c;右側是相關設置&#xff08;顏色、標題等&#…

    政安晨【開源人工智能硬件】【ESP樂鑫篇】 —— 在macOS上部署工具開發環境(小資的非開發者用蘋果系統也可以玩樂鑫)

    政安晨的個人主頁&#xff1a;政安晨 歡迎 &#x1f44d;點贊?評論?收藏 希望政安晨的博客能夠對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff01; 前言 開源人工智能硬件會給你帶來無限可能&#xff0c;玩開源硬件&#xff0c;環境和工具少…

    Vue3 學習教程,從入門到精通,vue3學習中的JavaScript ES6 特性詳解與案例(5)

    vue3學習中的JavaScript ES6 特性詳解與案例 ES6&#xff08;ECMAScript 2015&#xff09;是 JavaScript 的一個重要版本&#xff0c;引入了許多新特性&#xff0c;極大地提升了語言的表達能力和開發效率。本文將詳細介紹 ES6 的主要特性&#xff0c;包括 let 和 const 命令、變…

    深度學習模型1:理解LSTM和BiLSTM

    深度學習模型1&#xff1a;理解LSTM和BiLSTM 因為最近科研復現論文中需要了解單向LSTM和雙向LSTM&#xff0c;所以就學習了一下LSTM的基本原理&#xff0c;下面孬孬帶著大家一起學習一下&#xff0c;感謝大家的一鍵三連 一、RNN 因為談到LSTM&#xff0c;就必不可少的會考慮RNN…