Java常見對象之String

来源:https://www.cnblogs.com/dichuan/archive/2018/07/26/9374601.html
-Advertisement-
Play Games

String類的概述 String 類代表字元串。Java 程式中的所有字元串字面值(如 "abc" )都作為此類的實例實現。字元串是常量,一旦被賦值,就不能被改變。 String類的構造方法 * public String():空構造 * public String(byte[] bytes):把 ...


 

String類的概述 

String 類代表字元串。Java 程式中的所有字元串字面值(如 "abc" )都作為此類的實例實現。
字元串是常量,一旦被賦值,就不能被改變。

String類的構造方法

* public String():空構造
* public String(byte[] bytes):把位元組數組轉成字元串
* public String(byte[] bytes,int index,int length):把位元組數組的一部分轉成字元串
* public String(char[] value):把字元數組轉成字元串
* public String(char[] value,int index,int count):把字元數組的一部分轉成字元串
* public String(String original):把字元串常量值轉成字元串

String類的常見面試題

1.判斷定義為String類型的s1和s2是否相等
* String s1 = "abc";
* String s2 = "abc";
* System.out.println(s1 == s2);
* System.out.println(s1.equals(s2));

== 比較的是對象地址,equals對比的是值。都為true。String s1 = "abc" 存儲在常量池 中,常量池的特點是如果沒有就創建,如果已經有了,則不創建,所以s1和s2是同一個對象。


 2.下麵這句話在記憶體中創建了幾個對象?
* String s1 = new String("abc");

 

兩個,第一個在常量池中,第二個在堆中。


3.判斷定義為String類型的s1和s2是否相等
* String s1 = new String("abc");
* String s2 = "abc";
* System.out.println(s1 == s2);
* System.out.println(s1.equals(s2));

由第二題可知,第一個是false,第二個是true。


4.判斷定義為String類型的s1和s2是否相等
* String s1 = "a" + "b" + "c";
* String s2 = "abc";
* System.out.println(s1 == s2);
* System.out.println(s1.equals(s2));

兩個都是true。第一個因為Java有常量優化機制,在編譯階段就直接是“abc”了。


5.判斷定義為String類型的s1和s2是否相等
* String s1 = "ab";
* String s2 = "abc";
* String s3 = s1 + "c";
* System.out.println(s3 == s2);
* System.out.println(s3.equals(s2));

第一個是為false,第二個為true。第一句和第二句分別在常量池中創建常量“ab”,“abc”,第三句代碼中的+是通過 StringBuffer的append方法將s1和“c”連接起來,再通過toString方法轉換成String對象,是在堆中的一個新對象,與常量池中的s2不同。

String類的判斷功能

* boolean equals(Object obj):比較字元串的內容是否相同,區分大小寫
* boolean equalsIgnoreCase(String str):比較字元串的內容是否相同,忽略大小寫
* boolean contains(String str):判斷大字元串中是否包含小字元串
* boolean startsWith(String str):判斷字元串是否以某個指定的字元串開頭
* boolean endsWith(String str):判斷字元串是否以某個指定的字元串結尾
* boolean isEmpty():判斷字元串是否為空。

String類的獲取功能

* int length():獲取字元串的長度。
* char charAt(int index):獲取指定索引位置的字元
* int indexOf(int ch):返回指定字元在此字元串中第一次出現處的索引。
* int indexOf(String str):返回指定字元串在此字元串中第一次出現處的索引。
* int indexOf(int ch,int fromIndex):返回指定字元在此字元串中從指定位置後第一次出現處的索引。
* int indexOf(String str,int fromIndex):返回指定字元串在此字元串中從指定位置後第一次出現處的索引。
* lastIndexOf
* String substring(int start):從指定位置開始截取字元串,預設到末尾。
* String substring(int start,int end):從指定位置開始到指定位置結束截取字元串。

案例演示1:遍歷字元串

    public static void main(String[] args) {
        String s = "heima";    
        for(int i = 0; i < s.length(); i++) {            
            System.out.println(s.charAt(i));        
        }
    }

案例演示2:統計不同類型字元個數

* 需求:統計一個字元串中大寫字母字元,小寫字母字元,數字字元出現的次數,其他字元出現的次數。
* ABCDEabcd123456!@#$%^

    public static void main(String[] args) {
        String s = "ABCDEabcd123456!@#$%^";
        int big = 0;
        int small = 0;
        int num = 0;
        int other = 0;
        //1,獲取每一個字元,通過for迴圈遍歷
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);                        //通過索引獲取每一個字元
            //2,判斷字元是否在這個範圍內
            if(c >= 'A' && c <= 'Z') {
                big++;                                    //如果滿足是大寫字母,就讓其對應的變數自增
            }else if(c >= 'a' && c <= 'z') {
                small++;
            }else if(c >= '0' && c <= '9') {
                num++;
            }else {
                other++;
            }
        }
        
        //3,列印每一個計數器的結果
        System.out.println(s + "中大寫字母有:" + big + "個,小寫字母有:" + small + "個,數字字元:" 
        + num + "個,其他字元:" + other + "個");
    }

String的轉換功能

* byte[] getBytes():把字元串轉換為位元組數組。
* char[] toCharArray():把字元串轉換為字元數組。
* static String valueOf(char[] chs):把字元數組轉成字元串。
* static String valueOf(int i):把int類型的數據轉成字元串。
* 註意:String類的valueOf方法可以把任意類型的數據轉成字元串

* String toLowerCase():把字元串轉成小寫。(瞭解)
* String toUpperCase():把字元串轉成大寫。
* String concat(String str):把字元串拼接。

案例演示

* 需求:把一個字元串的首字母轉成大寫,其餘為小寫。(只考慮英文大小寫字母字元)

    public static void main(String[] args) {
        String s = "woaiHEImaniaima";
        String s2 = s.substring(0, 1).toUpperCase().concat(s.substring(1).toLowerCase());
        System.out.println(s2);
    }

String類的其他功能

* String replace(char old,char new)
* String replace(String old,String new)
* String trim()

字元串反轉

* 需求:把字元串反轉
* 舉例:鍵盤錄入"abc"
* 輸出結果:"cba"

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);                //創建鍵盤錄入對象
        System.out.println("請輸入一個字元串:");
        String line = sc.nextLine();                        //將鍵盤錄入的字元串存儲在line中
        char[] arr = line.toCharArray();                    //將字元串轉換為字元數組    
        String s = "";
        for(int i = arr.length-1; i >= 0; i--) {            //倒著遍歷字元數組
            s = s + arr[i];                                    //拼接成字元串
        }        
        System.out.println(s);
    }

 

在大串中查找小串出現的次數代碼實現

* 統計大串中小串出現的次數

    public static void main(String[] args) {
        //定義大串
        String max = "woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma";
        //定義小串
        String min = "heima";
        
        //定義計數器變數
        int count = 0;
        //定義索引
        int index = 0;
        //定義迴圈,判斷小串是否在大串中出現
        while((index = max.indexOf(min)) != -1) {
            count++;                                    //計數器自增
            max = max.substring(index + min.length());
        }
        
        System.out.println(count);
    }

 


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

-Advertisement-
Play Games
更多相關文章
  • 最近在做一個項目的時候,需要使用golang來調用操作系統中的命令行,來執行shell命令或者直接調用第三方程式,這其中自然就用到了golang自帶的exec.Command. 但是如果直接使用原生exec.Command會造成大量的重覆代碼,網上搜了一圈又沒有找到對exec.Command相應的封 ...
  • 本文為CUBA-Platform簡介 ,一個結合了可靠架構、企業級應用程式“必備”功能和應用程式快速開發工具的開源框架。 ...
  • <! done   簡單的‘Hello World!’   Python命令行 假設你已經安裝好了Python, 那麼在Linux命令行輸入: $python 將直接進入python。然後在命令行提示符>>>後面輸入: >>>print('He ...
  • 前言 CountDownLatch是一個閉鎖實現,它可以使一個或者多個線程等待一組事件發生。它包含一個計數器,用來表示需要等待的事件數量,coutDown方法用於表示一個事件發生,計數器隨之遞減,而await方法等待計數器為0之前一直阻塞。它是基於AQS的共用鎖來實現的,其中使用了較多的AQS的方法 ...
  • 1、作用域public,private,protected,以及不寫時的區別 答:區別如下: 作用域 當前類 同一package 子孫類 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不寫時預設 ...
  • 網關服務的作用: 身份認證、路由服務、為前端服務的後端—數據聚合 身份認證 如果我們的微服務和終端通信,勢必要考慮身份認證,如果我們的微服務都與每個終端用戶打交道,那麼這些代碼就需要拷貝多份, 並且植入到每個微服務業務代碼中,這就造成業務代碼和身份認證代碼耦合,降低代碼的復用性。 路由服務 由運維人 ...
  • DVWA列出了最流行、危害最大的幾個漏洞中就有命令註入漏洞。這種漏洞利用起來非常的簡單。只要會使用基本的命令就可以利用,入門門檻非常非常的低。以DVWA為靶機,測試一下命令註入漏洞。 ...
  • 1. 學習計劃 1、Solr服務搭建 2、Solrj使用測試 3、把資料庫中的數據導入索引庫 4、搜索功能的實現 2. Solr服務搭建 2.1. Solr的環境 Solr是java開發。 需要安裝jdk。 安裝環境Linux。 需要安裝Tomcat。 2.2. 搭建步驟 第一步:把solr 的壓縮 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...