Java常用API——String字元串運算

来源:https://www.cnblogs.com/HelloBigTable/archive/2019/02/09/10357554.html
-Advertisement-
Play Games

一、字元串運算 String類 1.概述 String是特殊的引用數據類型,它是final類。 2.構造方法 String str = "abc"; 相當於: char date[] = {'a','b','c'}; String str = new String{data}; 3.主要方法 cha ...


一、字元串運算 String類

  1.概述

    String是特殊的引用數據類型,它是final類。

  2.構造方法

    String str = "abc";

    相當於:  char date[] = {'a','b','c'};

         String str = new String{data};

  3.主要方法

   char charAt(int index)  返回char指定索引處的值。

   boolean contains(CharSequence s)當且僅當字元串包含指定char值序列返回true

   boolean equals(Object anObject)  將次字元串與指定對象進行比較

   int indexOf(int ch)  返回指定字元第一次出現的索引值

   int length()  返回字元串的長度,多用於迴圈的終止條件

   boolean matches(String regex)  判斷一個字元串是否匹配給定的規則表達式

   String replace(char oldChar,char newChar) 將串中所有的oldChar替換為newChar

   String split(String regex)  將字元串按照規矩進行切分

   String subString(int beginIndex) 返回該字元串的beginindex索引之後的字元串

   String toLowerCase()  將該字元串中的所有大寫字母變為小寫字母

   String toUpperCase()  將該字元串中的所有小寫字母變為大寫字母

   String trim()  刪除該字元串所有前導和尾隨的空格並返回

   /*類型轉換*/
    static String valueOf(boolean b)
    返回 boolean參數的字元串 boolean形式。 
    static String valueOf(char c)
    返回 char參數的字元串 char形式。 
    static String valueOf(char[] data)
    返回 char數組參數的字元串 char形式。 
    static String valueOf(char[] data, int offset, int count)
    返回 char數組參數的特定子陣列的字元串 char形式。 
    static String valueOf(double d)
    返回 double參數的字元串 double形式。 
    static String valueOf(float f)
    返回 float參數的字元串 float形式。 
    static String valueOf(int i)
    返回 int參數的字元串 int形式。 
    static String valueOf(long l)
    返回 long參數的字元串 long形式。 
    static String valueOf(Object obj)
    返回 Object參數的字元串 Object形式。

  註意:String字元串“==”與equals方法的區別:

    如果是通過String str = ""聲明的,==和equals都可是使用;

    如果是通過new String ("")聲明的,不能用==,只能用equals。

 

  4.演示案例

  需求一:計算一個字元串中大寫字母、小寫字母和數字的個數

    思路:將字元串通過for迴圈進行便利,使用charAt方法獲取每一位字元,然後將每一位字元與AscII碼對應的值相對比判斷是大寫字母、小寫字母、數字,計數列印。

/**
 * @ author: PrincessHug
 * @ date: 2019/2/7, 17:09
 * @ Blog: https://www.cnblogs.com/HelloBigTable/
 */
public class StringAPIDemo {
    /**
     * 需求:計算字元串中大寫字母、小寫字母、數字出現的次數
     * @param args 參數
     */
    public static void main(String[] args) {
        //通過用戶輸入得到一個字元串
        String str = getString();

        getCount(str);

    }

    private static void getCount(String str) {
        int upperNum = 0;
        int lowerNum = 0;
        int digit = 0;
        for (int i = 0;i< str.length();i++){
            char c = str.charAt(i);
            /**
             * AscII碼數字1-9(48-57),A-Z(65-91),a-z(97-123)
             */
            if (c>=48 && c<=57){
                digit++;
            }
            if (c>=65 && c<=91){
                upperNum++;
            }
            if (c>=97 && c<=123){
                lowerNum++;
            }
        }
        System.out.println("數字出現的次數為:" + digit);
        System.out.println("大寫字母出現的次數為:" + upperNum);
        System.out.println("小寫字母出現的次數為:" + lowerNum);
    }

    private static String getString() {
        System.out.println("請輸入一個字元串:");
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        return s;
    }
}

  需求二:查詢父字元串中某一個子字元串出現的次數

    思路1:使用indexOf方法查詢子字元串第一次出現的索引a,再使用subString方法返回父字元串索引(a+子字元串長度)之後的字元串,並計數+1,迴圈該操作知道indexOf方法返回值為-1停止,獲取計數值即可。

    思路2:使用split方法將父字元串按照子字元串進行切分得到String數組,使用subString方法獲取父字元串最後的字元串是否等於子字元串,若等於,返回String數組的length長度;若不等,則返回String數組的length-1.

**
 * @ author: PrincessHug
 * @ date: 2019/2/7, 17:34
 * @ Blog: https://www.cnblogs.com/HelloBigTable/
 */
public class FindChildStringCount {
    /**
     * 需求:查詢父字元串中某一個子字元串的數量
     * @param args
     */
    public static void main(String[] args) {
        String parent = "itstar123qweritstar()%%dfitstarsdgji";
        String child = "itstar";

        int num1 = getChildStringCount01(parent, child);
        int num2 = getChildStringCount02(parent,child);
        int num3 = getChildStringCount03(parent,child);
        System.out.println("方法一:" + num1 + "次。");
        System.out.println("方法二:" + num2 + "次。");
        System.out.println("方法三:" + num3 + "次。");
    }

    private static int getChildStringCount02(String parent, String child) {
        String[] s = parent.split(child);
        if (child.equals(parent.substring(parent.length()-child.length()))){
            return s.length;
        }else {
            return s.length-1;
        }
    }

    private static int getChildStringCount01(String parent,String child) {
        int num = 0;
        int index = 0;
        while ((index = parent.indexOf(child)) != -1){
            num++;
            parent = parent.substring(index + child.length());
        }

        return num;
    }

    private static int getChildStringCount03(String parent,String child){
        String[] s = parent.split(child);
        int sum = 0;
        for (int i = 0;i < s.length;i++){
            sum += s[i].length();
        }
        return sum==parent.length()-(s.length-1)*child.length()?s.length-1:s.length;
    }

}

 

  5.String的規則匹配(正則表達式)

    正則表達式常用於驗證身份證號、qq號、郵箱等

   字元類及含義:

    [abc]  =>  abc都可以

    [a-zA-Z]  =>  a-z或者A-Z都可以,兩頭都是閉區間

    [0-9]  =>  數字0-9都可以

    \d   =>   與[0-9]一樣

    \D     =>   不能是數字

    \w     =>   表示字母、數字、下劃線都可以,等於[a-zA-Z0-9_]

    x?     =>   表示x出現一次或一次也沒有

    x*   =>   表示x出現了零次或多次

    X{n}     =>   表示x出現了n次

    X{n,m}    =>   表示x出現了n到m次

    X+     =>   表示x至少出現了一次

    ^     =>   表示正則表達式的開頭

    &    =>   表示正則表達式結尾

   需求一:驗證qq號碼是否正確

     qq號碼條件:(1)位數為5-15位

            (2)開頭數字不能為0

     正則表達式為:regex = [1-9]\\d{4-14}

   需求二:驗證手機號碼是否正確

     手機號條件:(1)位數為11位

           (2)第一位為1

           (3)第二位為3-9

     正則表達式為:regex = [1]][3-9]\\d{9}  

   需求三:驗證郵箱是否正確

      郵箱條件:(1)@之前為郵箱名,字母、數字、下劃線都可以

           (2)@符號

           (3)@之後為郵箱功能變數名稱(qq.com/163.com.cn)

     正則表達式為:regex = \\w+@[a-zA-Z0-9]+(\\.\\w{2,3})+

  以下為需求一:驗證qq號碼是否正確,需求二、三隻需將regex修改為對應的正則表達式即可。

/**
 * @ author: PrincessHug
 * @ date: 2019/2/7, 21:51
 * @ Blog: https://www.cnblogs.com/HelloBigTable/
 */
public class MatchQQ {
    public static void main(String[] args) {
        while (true) {
            String qq = getQQ();
            if (qq.equals("stop")){
                break;
            }else {
                matchQQ(qq);
            }
        }
    }

    /**
     * @return 返回獲取的qq號
     */
    private static String getQQ() {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入您的qq號");
        String s = sc.nextLine();
        return s;
    }

    /**
     * 驗證qq號是否匹配regex表達式
     * @param qq 獲得用戶輸入的qq號
     */
    private static void matchQQ(String qq) {
        String regex = qqRegex();
        if (qq.matches(regex)) {
            System.out.println("QQ號正確!");
        } else {
            System.out.println("QQ號錯誤!");
        }
    }

    /**
     * @return 返回qq的正則表達式
     */
    private static String qqRegex() {
        String regex = "[1-9][0-9]{4,14}";
        return regex;
    }
}

  


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

-Advertisement-
Play Games
更多相關文章
  • 線段樹 線段樹的每一個節點都代表一段 區間 線段樹用於維護符合結合律的的信息 (比如區間max/min、sum、xor之類的) 線段樹 在最壞的情況下效率低於分塊(大常數) 線段樹 是一顆二叉樹,對於每個父親節點(編號i)存在兩個兒子,編號分別為2i和2i+1. 建樹 1 void build(ll ...
  • seek() 1.當一個文件打開時,指針預設在開頭 2.seek(0,0)把指針拉回開頭 3.seek()在python3中不支持往左位移(指針不能向左邊調)(第一個參數不能為負數) 4.seek(位移量,參照物) 總結:seek()相當於無形的滑鼠操作 tell() tell就是獲取當前指針到開頭 ...
  • 題意 "題目鏈接" Sol 異或高斯消元的板子題。 bitset優化一下,複雜度$O(\frac{nm}{32})$ 找最優解可以考慮高斯消元的過程,因為異或的特殊性質,每次向下找的時候找到第一個1然後交換就行,這樣顯然是最優的 cpp include using namespace std; co ...
  • 第84節:Java中的網路編程(中) 實現客戶端和服務端的通信: 客戶端需要的操作,創建socket,明確地址和埠,進行鍵盤錄入,獲取需要的數據,然後將錄入的數據發送給服務端,為socket輸出流,然後進行讀取服務端發送回來的大寫數據,為socket讀取流,最後進行客戶端顯示器的顯示,進行讀寫操作 ...
  • 上手Tomcat 1.Ubuntu 18.04 下載/安裝Tomcat 以下內容 "參考鏈接" 1. 安裝JDK 2. 創建Tomcat用戶 從安全形度考慮,Tomcat應當由非Root用戶運行。所以接下來我們要創建一個用戶組和用戶來運行Tomcat 添加用戶組: 添加用戶: 3. 安裝Tomcat ...
  • 題意 "題目鏈接" Sol 不會卡常,自愧不如。下麵的代碼只有66分。我實在懶得手寫平衡樹了。。 思路比較直觀:拿個set維護每個數出現的位置,再寫個線段樹維護區間和 cpp include define LL long long const int MAXN = 5e5 + 10, INF = 1 ...
  • 本片博文主要記錄Python中正則表達式re模塊和中文分詞模塊jieba ...
  • 9、迴圈結構 9、1 分支結構——if Ø 格式一中,條件成立執行代碼塊內容,切如果只有一條語句可以省略{} Ø 格式二中:條件成立執行代碼1內容,條件不成立執行代碼塊2的內容 Ø 格式三種:條件1成立執行代碼塊1如果不成立繼續向下執行條件2,如果條件2成立執行代碼塊2,如果條件2也不成立繼續向下執 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...