最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 字符串操作之contains 和 substring 方法最佳實(shí)踐與常見(jiàn)問(wèn)題

 更新時(shí)間:2025年09月23日 11:23:05   作者:Yrui.  
本文給大家詳細(xì)介紹Java 字符串操作之contains 和 substring 方法最佳實(shí)踐與常見(jiàn)問(wèn)題,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

一、contains 方法詳解

1. 方法定義與語(yǔ)法

public boolean contains(CharSequence s)
  • 功能:檢查字符串是否包含指定的字符序列
  • 參數(shù)CharSequence 類(lèi)型(String 實(shí)現(xiàn)了該接口)
  • 返回值:boolean 類(lèi)型(true 表示包含,false 表示不包含)

2. 底層實(shí)現(xiàn)原理

// String 類(lèi)中的實(shí)際實(shí)現(xiàn)
public boolean contains(CharSequence s) {
    return indexOf(s.toString()) >= 0;
}
  • 實(shí)際調(diào)用 indexOf() 方法
  • 如果找到子串返回索引位置(≥0),否則返回 -1
  • 時(shí)間復(fù)雜度:O(n*m),n 是原字符串長(zhǎng)度,m 是子串長(zhǎng)度

3. 使用示例

String text = "Java programming is fun";
System.out.println(text.contains("pro"));  // true
System.out.println(text.contains("Python")); // false

4. 注意事項(xiàng)

  • 大小寫(xiě)敏感"Hello".contains("hello") 返回 false
  • 空字符串"abc".contains("") 總是返回 true
  • null 參數(shù):會(huì)拋出 NullPointerException

二、substring 方法詳解

1. 方法重載

public String substring(int beginIndex)
public String substring(int beginIndex, int endIndex)

2. 參數(shù)說(shuō)明

參數(shù)說(shuō)明注意事項(xiàng)
beginIndex起始索引(包含)必須 ≥0 且 ≤ 字符串長(zhǎng)度
endIndex結(jié)束索引(不包含)必須 ≥ beginIndex 且 ≤ 字符串長(zhǎng)度

3. 使用示例

String str = "HelloWorld";
// 從索引5開(kāi)始到結(jié)尾
System.out.println(str.substring(5)); // "World"
// 從索引0開(kāi)始到5(不包含5)
System.out.println(str.substring(0, 5)); // "Hello"

4. 常見(jiàn)錯(cuò)誤

// 索引越界
str.substring(10); // StringIndexOutOfBoundsException
// 參數(shù)順序錯(cuò)誤
str.substring(5, 0); // StringIndexOutOfBoundsException

三、contains 和 substring 結(jié)合使用

1. 原代碼分析

public static String findSubstringWithContext(String text, String subString) {
    if (text.contains(subString)) {
        int startIndex = text.indexOf(subString);
        int endIndex = startIndex + subString.length();
        return text.substring(0, endIndex);
    }
    return "子串未找到";
}

2. 問(wèn)題診斷

  • 功能不完整:只返回了子串前面的內(nèi)容,沒(méi)有返回后面的內(nèi)容
  • 描述不符:方法名暗示返回"完整前后內(nèi)容",但實(shí)際只返回了前半部分
  • 輸出格式:沒(méi)有明確區(qū)分前后文和子串本身

3. 改進(jìn)實(shí)現(xiàn)

public static String getSubstringContext(String text, String sub) {
    if (!text.contains(sub)) {
        return "未找到子串";
    }
    int start = text.indexOf(sub);
    int end = start + sub.length();
    String before = (start > 0) ? text.substring(0, start) : "";
    String after = (end < text.length()) ? text.substring(end) : "";
    return "前文: \"" + before + "\", 子串: \"" + sub + "\", 后文: \"" + after + "\"";
}

4. 測(cè)試用例

String text = "這是一個(gè)測(cè)試字符串,用于測(cè)試子串出現(xiàn)的完整前后內(nèi)容。";
String subString = "測(cè)試";
System.out.println(getSubstringContext(text, subString));
// 輸出: 前文: "這是一個(gè)", 子串: "測(cè)試", 后文: "字符串,用于測(cè)試子串出現(xiàn)的完整前后內(nèi)容。"

四、其他重要字符串方法詳解

1. split 方法

String csv = "張三,20,男";
String[] parts = csv.split(","); // ["張三", "20", "男"]
  • 正則表達(dá)式支持split("\\.") 按點(diǎn)分割
  • 限制分割次數(shù)split(",", 2) 只分割成兩部分

2. replace/replaceAll

String input = "a1b2c3";
String replaced = input.replaceAll("\\d", ""); // "abc"
  • replace:替換字符或字符序列
  • replaceAll:使用正則表達(dá)式替換

3. trim 和 isEmpty

String userInput = "  Hello World  ";
String trimmed = userInput.trim(); // "Hello World"
boolean empty = trimmed.isEmpty(); // false
  • trim():移除首尾空白字符
  • isEmpty():檢查長(zhǎng)度是否為0

4. startsWith/endsWith

String filename = "document.txt";
boolean isTextFile = filename.endsWith(".txt"); // true

五、最佳實(shí)踐與常見(jiàn)問(wèn)題

1. 字符串操作最佳實(shí)踐

  1. 空值檢查:始終檢查可能為 null 的字符串
  2. 索引邊界:使用 substring 前驗(yàn)證索引范圍
  3. 不可變性:字符串不可變,操作返回新對(duì)象
  4. 性能考慮:避免在循環(huán)中拼接字符串(使用 StringBuilder)

2. 常見(jiàn)問(wèn)題解決方案

問(wèn)題:contains 大小寫(xiě)敏感

// 解決方案:統(tǒng)一轉(zhuǎn)換為小寫(xiě)
if (text.toLowerCase().contains(sub.toLowerCase())) { ... }

問(wèn)題:substring 索引計(jì)算錯(cuò)誤

// 正確計(jì)算結(jié)束索引
int endIndex = startIndex + subString.length();

問(wèn)題:處理多字節(jié)字符(中文)

String chinese = "你好世界";
// substring 正確處理多字節(jié)字符
System.out.println(chinese.substring(0, 2)); // "你好"

3. 性能優(yōu)化技巧

// 當(dāng)需要多次檢查包含關(guān)系時(shí)
int index = text.indexOf(sub);
if (index != -1) {
    // 直接使用index,避免二次查找
    String before = text.substring(0, index);
    // ...
}

六、完整示例代碼

public class StringOperations {
    public static void main(String[] args) {
        String text = "Java編程很有趣,Java是最好的編程語(yǔ)言之一";
        String sub = "Java";
        String context = getSubstringContext(text, sub);
        System.out.println(context);
    }
    public static String getSubstringContext(String text, String sub) {
        if (text == null || sub == null) {
            return "輸入不能為null";
        }
        if (!text.contains(sub)) {
            return "未找到子串: \"" + sub + "\"";
        }
        int start = text.indexOf(sub);
        int end = start + sub.length();
        String before = (start > 0) ? text.substring(0, start) : "[開(kāi)頭]";
        String after = (end < text.length()) ? text.substring(end) : "[結(jié)尾]";
        return String.format("前文: \"%s\", 子串: \"%s\", 后文: \"%s\"", before, sub, after);
    }
}

輸出結(jié)果:

前文: "", 子串: "Java", 后文: "編程很有趣,Java是最好的編程語(yǔ)言之一"

總結(jié)

  1. contains 方法
    • 用于檢查字符串是否包含子串
    • 底層基于 indexOf 實(shí)現(xiàn)
    • 大小寫(xiě)敏感,需注意匹配規(guī)則
  2. substring 方法
    • 用于截取字符串的指定部分
    • 有兩種重載形式
    • 必須正確處理索引邊界
  3. 結(jié)合使用
    • 先用 contains 檢查存在性
    • 再用 indexOf 獲取位置
    • 最后用 substring 提取前后文
    • 注意處理邊界情況(開(kāi)頭、結(jié)尾)
  4. 最佳實(shí)踐
    • 添加空值檢查
    • 明確區(qū)分前后文
    • 使用格式化輸出提高可讀性
    • 考慮多字節(jié)字符支持

通過(guò)深入理解 contains 和 substring 方法的工作原理及結(jié)合使用技巧,您可以更有效地處理字符串操作任務(wù),編寫(xiě)出健壯、高效的代碼。

到此這篇關(guān)于Java 字符串操作之contains 和 substring 方法最佳實(shí)踐與常見(jiàn)問(wèn)題的文章就介紹到這了,更多相關(guān)java contains 和 substring使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java代碼重用之功能與上下文重用

    Java代碼重用之功能與上下文重用

    代碼重用通常使得程序開(kāi)發(fā)更加快速,并使得 BUG 減少。一旦一段代碼被封裝和重用,那么只需要檢查很少的一段代碼即可確保程序的正確性。接下來(lái)通過(guò)本文給大家介紹Java代碼重用之功能與上下文重用的相關(guān)知識(shí),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • java如何將實(shí)體類(lèi)轉(zhuǎn)換成json并在控制臺(tái)輸出

    java如何將實(shí)體類(lèi)轉(zhuǎn)換成json并在控制臺(tái)輸出

    這篇文章主要介紹了java如何將實(shí)體類(lèi)轉(zhuǎn)換成json并在控制臺(tái)輸出問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • spring boot openfeign從此和httpClient說(shuō)再見(jiàn)詳析

    spring boot openfeign從此和httpClient說(shuō)再見(jiàn)詳析

    這篇文章主要給大家介紹了關(guān)于spring boot openfeign從此和httpClient說(shuō)再見(jiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-06-06
  • 詳解SpringBoot注解讀取配置文件的方式

    詳解SpringBoot注解讀取配置文件的方式

    這篇文章主要介紹了詳解SpringBoot注解讀取配置文件的方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 基于SpringBoot實(shí)現(xiàn)離線(xiàn)應(yīng)用的4種實(shí)現(xiàn)方式

    基于SpringBoot實(shí)現(xiàn)離線(xiàn)應(yīng)用的4種實(shí)現(xiàn)方式

    在當(dāng)今高度依賴(lài)網(wǎng)絡(luò)的環(huán)境中,離線(xiàn)應(yīng)用的價(jià)值日益凸顯,而且具備離線(xiàn)工作能力已成為許多應(yīng)用的必備特性,本文將介紹基于SpringBoot實(shí)現(xiàn)離線(xiàn)應(yīng)用的4種不同方式
    2025-06-06
  • springboot調(diào)用C#封裝的DLL文件中函數(shù)的實(shí)現(xiàn)那

    springboot調(diào)用C#封裝的DLL文件中函數(shù)的實(shí)現(xiàn)那

    本文主要介紹了在Spring Boot中集成C# DLL,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • Redis實(shí)現(xiàn)延遲隊(duì)列的全流程詳解

    Redis實(shí)現(xiàn)延遲隊(duì)列的全流程詳解

    Redisson是Redis服務(wù)器上的分布式可伸縮Java數(shù)據(jù)結(jié)構(gòu),這篇文中主要為大家介紹了Redisson實(shí)現(xiàn)的優(yōu)雅的延遲隊(duì)列的方法,需要的可以參考一下
    2023-03-03
  • 詳解Java 自動(dòng)裝箱與自動(dòng)拆箱

    詳解Java 自動(dòng)裝箱與自動(dòng)拆箱

    這篇文章主要介紹了Java 自動(dòng)裝箱與自動(dòng)拆箱的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • SpringBoot如何正確配置并運(yùn)行Kafka

    SpringBoot如何正確配置并運(yùn)行Kafka

    這篇文章主要介紹了SpringBoot如何正確配置并運(yùn)行Kafka問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java編程用棧來(lái)求解漢諾塔問(wèn)題的代碼實(shí)例(非遞歸)

    Java編程用棧來(lái)求解漢諾塔問(wèn)題的代碼實(shí)例(非遞歸)

    這篇文章主要介紹了Java編程用棧來(lái)求解漢諾塔問(wèn)題的代碼實(shí)例(非遞歸),具有一定參考價(jià)值,這里給大家分享下,供朋友們參考。
    2017-10-10

最新評(píng)論

获嘉县| 临猗县| 金秀| 广元市| 五原县| 平乡县| 乐至县| 屏山县| 墨脱县| 雷山县| 新闻| 宝清县| 丹凤县| 霍林郭勒市| 河北区| 西乌珠穆沁旗| 临汾市| 台中市| 德阳市| 保康县| 增城市| 绥芬河市| 建阳市| 吴江市| 介休市| 青神县| 池州市| 曲周县| 鹤山市| 兴城市| 砚山县| 商河县| 沾化县| 克山县| 五寨县| 桓台县| 凤阳县| 榆社县| 安丘市| 靖江市| 吴川市|