Java 字符串操作教程:三個任務完整復現與解析

這次是完成一些小任務來試試身手,免得生疏:

編寫程序,使用charAt和length方法,將字符串"HelloWorld"拆分為"Hello"和"World"兩個子串并輸出。
設計一個方法,利用indexOf和lastlndexOf,查找字符串中某個字符最后一次出現的位置,若不存在則返回-1。
使用substring方法,截取郵箱地址(如"user@example.com")中的用戶名部分(即"@"之前的內容)。編寫程序,通過startsWith和endsWith方法判斷一個文件名稱(如"document.txt")是否是文本文件(以".txt"結尾)。
利用toLowerCase和toUpperCase方法,將字符串"AbCdEfG"轉換為全小寫和全大寫兩種形式并輸出。
設計方法,使用trim和isEmpty處理用戶輸入的字符串,去除首尾空格后判斷是否為空字符串。
使用replace(或replaceAll方法,將字符串中的所有數字字符替換為"",例如"a1b2c3"轉換為"abc"。編寫程序,通過split方法將CSV格式字符串(如"張三,20,男")拆分為數組并分別輸出各元素。
利用equals和equalslgnoreCase比較兩個字符串是否相等,區分大小寫和不區分大小寫兩種情況。
設計一個方法,結合contains和substring,判斷字符串是否包含指定子串,若包含則返回該子串首次出現的完整前后內容

任務一:Test01 字符串基礎操作

1. 拆分字符串(test_a)

public void test_a(){String hello = str.substring(0, 5);String world = str.substring(5);System.out.println("拆分結果:"+hello+"和"+world);
}

執行結果:

拆分結果:Hello和World

關鍵點解析:

  • substring(0, 5):截取索引0到4的字符(不包括索引5)
  • substring(5):從索引5開始截取到字符串末尾
  • 索引位置:H(0), e(1), l(2), l(3), o(4), W(5), o(6), r(7), l(8), d(9)

2. 查找字符最后位置(test_b)

public void test_b(){System.out.println("查找的隨機字母是" + randomString);System.out.println(randomString+"最后出現位置: " + lastCharPosition("HelloWorld", randomString));
}public static int lastCharPosition(String s, String c) {if (s.indexOf(c) == -1) {return -1;}else {return s.lastIndexOf(c);}
}

執行結果示例:

查找的隨機字母是o
o最后出現位置: 6

關鍵點解析:

  • indexOf():檢查字符是否存在
  • lastIndexOf():返回字符最后出現的位置
  • 返回-1表示字符不存在

3. 提取郵箱用戶名(test_c)

public void test_c(){int atIndex = email.indexOf('@');if (atIndex != -1) {System.out.println("用戶名: " + email.substring(0, atIndex));}
}

執行結果:

用戶名: user

關鍵點解析:

  • indexOf('@'):查找@符號的位置
  • substring(0, atIndex):截取從0到@符號前的字符串

任務二:Test02 字符串高級操作

1. 判斷文本文件(test_a)

public void test_a() {if (fileName.toLowerCase().startsWith("document") && fileName.toLowerCase().endsWith(".txt")) {System.out.println(fileName + " 是一個文本文件。");} else {System.out.println(fileName + " 不是一個文本文件。");}
}

執行結果:

document.txt 是一個文本文件。

關鍵點解析:

  • startsWith():檢查字符串開頭
  • endsWith():檢查字符串結尾
  • toLowerCase():統一大小寫處理

2. 大小寫轉換(test_b)

public void test_b() {System.out.println("全小寫: " + str.toLowerCase());System.out.println("全大寫: " + str.toUpperCase());
}

執行結果:

全小寫: abcdefg
全大寫: ABCDEFG

3. 處理用戶輸入(test_c)

public void test_c() {System.out.print("請輸入字符串: ");String userInput = scanner.nextLine();String trimmedInput = userInput.trim();if (trimmedInput.isEmpty()) {System.out.println("去除首尾空格后字符串為空。");} else {System.out.println("去除首尾空格后的字符串為: \"" + trimmedInput + "\"");}
}

執行結果示例:

請輸入字符串:    Hello World   
去除首尾空格后的字符串為: "Hello World"

4. 替換數字字符(test_d)

public void test_d() {String replacedString = numberString.replaceAll("\\d", "");System.out.println("替換數字后的字符串為: " + replacedString);
}

執行結果:

替換數字后的字符串為: abc

關鍵點解析:

  • replaceAll("\\d", ""):正則表達式匹配所有數字并替換為空
  • \\d:正則表達式匹配數字字符

任務三:Test03 字符串應用實踐

1. 拆分CSV數據(test_a)

public void test_a(){String csvString = "張三,20,男";String[] elements = csvString.split(",");for (String element : elements) {System.out.println(element);}
}

執行結果:

張三
20
男

關鍵點解析:

  • split(","):使用中文逗號作為分隔符
  • 返回字符串數組

2. 字符串比較(test_b)

public void test_b(){String str1 = "Hello";String str2 = "hello";System.out.println("str1 等于 str2 (區分大小寫): " + str1.equals(str2));System.out.println("str1 等于 str2 (不區分大小寫): " + str1.equalsIgnoreCase(str2));
}

執行結果:

str1 等于 str2 (區分大小寫): false
str1 等于 str2 (不區分大小寫): true

3. 子串上下文提取(test_c)

public void test_c(){String text = "這是一個測試字符串,用于測試子串出現的完整前后內容。";String subString = "測試";String result = findSubstringWithContext(text, subString);System.out.println("包含子串的完整前后內容: " + result);
}public static String findSubstringWithContext(String text, String subString) {if (text.contains(subString)) {int startIndex = text.indexOf(subString);int endIndex = startIndex + subString.length();System.out.println("子串開始索引: " + startIndex);System.out.println("子串結束索引: " + endIndex);return text.substring(0, endIndex);}return "子串未找到";
}

執行結果:

子串開始索引: 3
子串結束索引: 5
包含子串的完整前后內容: 這是一個測試

關鍵點解析:

  • contains():檢查子串是否存在
  • indexOf():獲取子串起始位置
  • substring(0, endIndex):截取從開始到子串結束的內容

contains 和 substring 方法深度解析

1. contains 方法詳解

方法簽名:

public boolean contains(CharSequence s)

工作原理:

  • 檢查字符串是否包含指定字符序列
  • 底層調用 indexOf()方法
  • 返回 true如果找到子串,否則 false

使用示例:

String str = "Hello World";
System.out.println(str.contains("World")); // true
System.out.println(str.contains("world")); // false (大小寫敏感)

2. substring 方法詳解

方法簽名:

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

參數說明:

  • beginIndex:起始索引(包含)
  • endIndex:結束索引(不包含)

使用示例:

String str = "HelloWorld";
System.out.println(str.substring(5)); // "World"
System.out.println(str.substring(0, 5)); // "Hello"

3. contains 和 substring 結合使用

優化后的子串上下文提取方法:

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 + "\"";
}

測試結果:

String text = "這是一個測試字符串,用于測試子串出現的完整前后內容。";
String subString = "測試";
System.out.println(getSubstringContext(text, subString));

輸出:

前文: "這是一個", 子串: "測試", 后文: "字符串,用于測試子串出現的完整前后內容。"

完整代碼整合

public class StringOperationsTutorial {public static void main(String[] args) {// 任務一:基礎操作testTask1();// 任務二:高級操作testTask2();// 任務三:應用實踐testTask3();}// 任務一實現public static void testTask1() {System.out.println("===== 任務一:字符串基礎操作 =====");// 1. 拆分字符串String str = "HelloWorld";String hello = str.substring(0, 5);String world = str.substring(5);System.out.println("拆分結果: " + hello + " 和 " + world);// 2. 查找字符最后位置char searchChar = 'o';int lastPos = lastCharPosition(str, searchChar);System.out.println("字符 '" + searchChar + "' 最后出現位置: " + lastPos);// 3. 提取郵箱用戶名String email = "user@example.com";int atIndex = email.indexOf('@');if (atIndex != -1) {System.out.println("郵箱用戶名: " + email.substring(0, atIndex));}}public static int lastCharPosition(String s, char c) {return s.lastIndexOf(c);}// 任務二實現public static void testTask2() {System.out.println("\n===== 任務二:字符串高級操作 =====");// 1. 判斷文本文件String fileName = "document.txt";if (fileName.endsWith(".txt")) {System.out.println(fileName + " 是文本文件");} else {System.out.println(fileName + " 不是文本文件");}// 2. 大小寫轉換String mixedCase = "AbCdEfG";System.out.println("全小寫: " + mixedCase.toLowerCase());System.out.println("全大寫: " + mixedCase.toUpperCase());// 3. 處理用戶輸入String userInput = "   Hello World   ";String trimmed = userInput.trim();System.out.println("原始輸入: '" + userInput + "'");System.out.println("去除空格: '" + trimmed + "'");System.out.println("是否為空: " + trimmed.isEmpty());// 4. 替換數字字符String withNumbers = "a1b2c3";String withoutNumbers = withNumbers.replaceAll("\\d", "");System.out.println("替換數字: " + withoutNumbers);}// 任務三實現public static void testTask3() {System.out.println("\n===== 任務三:字符串應用實踐 =====");// 1. 拆分CSV數據String csv = "張三,20,男";String[] parts = csv.split(",");System.out.println("CSV拆分結果:");for (String part : parts) {System.out.println(part);}// 2. 字符串比較String str1 = "Java";String str2 = "java";System.out.println("區分大小寫比較: " + str1.equals(str2));System.out.println("不區分大小寫比較: " + str1.equalsIgnoreCase(str2));// 3. 子串上下文提取String text = "Java編程很有趣,Java是最好的編程語言之一";String sub = "Java";String context = getSubstringContext(text, sub);System.out.println("子串上下文: " + context);}public static String getSubstringContext(String text, String sub) {if (!text.contains(sub)) {return "未找到子串: \"" + sub + "\"";}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 + "\"";}
}

執行結果預覽

===== 任務一:字符串基礎操作 =====
拆分結果: Hello 和 World
字符 'o' 最后出現位置: 6
郵箱用戶名: user===== 任務二:字符串高級操作 =====
document.txt 是文本文件
全小寫: abcdefg
全大寫: ABCDEFG
原始輸入: '   Hello World   '
去除空格: 'Hello World'
是否為空: false
替換數字: abc===== 任務三:字符串應用實踐 =====
CSV拆分結果:
張三
20
男
區分大小寫比較: false
不區分大小寫比較: true
子串上下文: 前文: "", 子串: "Java", 后文: "編程很有趣,Java是最好的編程語言之一"

關鍵知識點總結

  1. 字符串基礎操作
    • 使用 substring()進行字符串分割
    • 使用 indexOf()lastIndexOf()查找字符位置
    • 郵箱用戶名提取技巧
  2. 字符串高級操作
    • 文件類型判斷(endsWith()
    • 大小寫轉換(toLowerCase(), toUpperCase()
    • 用戶輸入處理(trim(), isEmpty()
    • 正則表達式替換(replaceAll()
  3. 字符串應用實踐
    • CSV數據解析(split()
    • 字符串比較(equals(), equalsIgnoreCase()
    • 子串上下文提取(contains(), indexOf(), substring()
  4. contains 和 substring 深度應用
    • 檢查子串存在性
    • 定位子串位置
    • 提取前后文內容
    • 處理邊界情況(開頭、結尾)

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

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

相關文章

向量技術研究報告:從數學基礎到AI革命的支柱

1. 向量的數學本質與歷史演變 1.1 核心定義與數學表示 向量是同時具有大小&#xff08;Magnitude&#xff09;和方向&#xff08;Direction&#xff09;的量&#xff0c;在數學上被嚴格定義為向量空間中的元素。與僅有大小的標量&#xff08;Scalar&#xff09;不同&#xff0c…

Qt QHorizontalStackedBarSeries詳解

1、概述QHorizontalStackedBarSeries 是 Qt Charts 模塊中的一個類&#xff0c;用于創建水平堆疊條形圖。它繼承自 QAbstractBarSeries 類&#xff0c;允許將多個數據系列堆疊在一起顯示&#xff0c;每個條形由多個部分組成&#xff0c;這些部分共同構成一個完整的條形&#xf…

《股票智能查詢與投資決策輔助應用項目方案》

前引&#xff1a;本股票智能查詢與投資決策輔助應用通過整合多源金融數據&#xff0c;運用量化分析 機器學習技術&#xff0c;為普通投資者提供全方位股票信息服務和個性化投資建議。系統不僅解決了傳統工具 “數據分散、分析復雜” 的問題&#xff0c;更通過人性化交互和直觀…

從零開始構建Kubernetes Operator:一個完整的深度學習訓練任務管理方案

從零開始構建Kubernetes Operator&#xff1a;一個完整的深度學習訓練任務管理方案一、引言二、為什么需要Operator&#xff1f;1. Controller vs Operator&#xff1a;本質區別2. 有狀態服務 vs 無狀態服務的挑戰三、項目架構設計3.1整體架構圖3.2核心組件4.核心實現解析1. CR…

第二十二篇|新世界語學院教育數據深度解析:學制函數、能力矩陣與升學圖譜

第二十二篇&#xff5c;新世界語學院教育數據深度解析&#xff1a;學制函數、能力矩陣與升學圖譜 系列主題&#xff1a;500所日本語言學校結構數據工程 關鍵詞&#xff1a;新世界語學院、東京新宿、學制函數建模、JLPT能力矩陣、升學網絡、教育數據工程 一、合規與法人建模&…

Java開發工具選擇指南:Eclipse、NetBeans與IntelliJ IDEA對比

在Java開發的世界里&#xff0c;選擇合適的開發工具就如同挑選一把稱手的禪杖&#xff0c;能助你在代碼修行的路上更加得心應手。本文將為Java開發者提供一份實用的IDE選擇指南&#xff0c;從功能、適用人群、性能等方面深入解析幾款主流的Java開發工具&#xff0c;幫助你找到最…

iOS App 內存泄漏與性能調優實戰 如何排查內存問題、優化CPU與GPU性能、降低耗電并提升流暢度(uni-app iOS開發優化指南)

在 iOS 應用開發中&#xff0c;內存泄漏 是最常見且最難排查的性能問題之一。 它會導致應用 運行越來越卡、占用內存過高、頻繁崩潰&#xff0c;甚至嚴重消耗電池。 尤其在 uni-app 跨平臺開發 中&#xff0c;JS 層和原生層的混合調用更容易隱藏內存問題&#xff1a; 對象未釋放…

從源代碼開始構建、部署和管理應用程序

1.創建項目目錄并準備應用程序的代碼及其依賴1.創建項目目錄&#xff0c;并將當前目錄切換到該目錄[roothost1 ~]# mkdir python-web && cd python-web2.創建 app.py 文件并添加以下代碼[roothost1 python-web]# vi app.py [roothost1 python-web]# cat app.py import …

Flutter-[2]第一個應用

摘要 根據官方文檔搭配好環境&#xff0c;使用vscode創建完應用后&#xff0c;會遇到以下問題 設備無法選擇打開了lib\main.dart右上角也沒有運行按鈕 環境 Windows11Flutter 3.35.4 必要設置 1. 查看是否開啟Windows桌面應用開發flutter config --list輸出如下: All Settings:…

QListWidget選擇阻止問題解決方案

QListWidget選擇阻止問題解決方案QListWidget選擇阻止問題解決方案問題背景QListWidget工作機制詳解1. 事件處理流程2. 關鍵機制說明2.1 鼠標事件與信號的分離2.2 信號阻塞的局限性2.3 斷開連接方法的問題問題的根本原因1. 異步事件處理2. 多層狀態管理3. 事件優先級解決方案演…

TCL華星計劃投建第8.6代印刷OLED產線

近日&#xff0c;TCL科技集團股份有限公司&#xff08;000100.SZ&#xff09;發布公告&#xff0c;公司、旗下子公司TCL華星與廣州市人民政府、廣州經濟技術開發區管理委員會共同簽署項目合作協議&#xff0c;擬共同出資于廣州市建設一條月加工2290mm2620mm玻璃基板能力約2.25萬…

MATLAB 時間序列小波周期分析

1. 文件結構 WaveletPeriod/ ├── main_wavelet_period.m % 一鍵運行 ├── wavelet_power_spectrum.m % 小波功率譜 顯著性 ├── period_peak_detect.m % 自動周期峰值 ├── plot_wavelet_results.m % 時頻圖 周期圖 └── example/└── temp.csv …

如何精準配置儲

當電費賬單變身利潤引擎&#xff0c;您的企業是否做好了準備&#xff1f;鷓鴣云儲能仿真軟件&#xff0c;不止于仿真——我們以智能算法為核心&#xff0c;為企業定制“高收益、高適配、可持續”的儲能配置方案&#xff0c;將用電數據轉化為新一輪增長動能。智慧大腦&#xff1…

Uniapp崩潰監控體系構建:內存泄漏三維定位法(堆棧/資源/線程)

在Uniapp開發中&#xff0c;內存泄漏是導致應用崩潰的核心隱患。通過堆棧分析、資源追蹤和線程監控三維定位法&#xff0c;可系統化定位泄漏源。以下是完整實施方案&#xff1a;一、堆棧維度&#xff1a;泄漏對象溯源內存快照比對使用Chrome DevTools定期獲取內存快照&#xff…

NLP中Subword算法:WordPiece、BPE、BBPE、SentencePiece詳解以及代碼實現

本文將介紹以下內容&#xff1a; 1. Subword與傳統tokenization技術的對比2. WordPiece3. Byte Pair Encoding (BPE)4. Byte-level BPE(BBPE)5. SentencePiece 以及各Subword算法代碼實現 一、Subword與傳統tokenization技術的對比 1. 傳統tokenization技術 傳統tokenizatio…

十一章 無界面壓測

一、采用無界面壓測的原因1.節約系統資源。 2.更快捷&#xff0c;只需要啟動命令即可進行壓測 3.主要是用于性能壓測集成.無界面壓測命令參數&#xff1a; -n 表示無界面壓測 -t 制定你的 jmx 腳本 -l 生成 jtl 測試報告二、注意配置文件設置:輸出為xml jmeter.save.s…

從零實現 Qiankun 微前端:基座應用控制子應用路由與信息交互

隨著前端業務的快速發展,單體應用模式(Monolith)越來越難以支撐復雜業務場景。微前端(Micro Frontends)應運而生,它將大型應用拆解成多個子應用(Micro App),通過主應用進行統一調度和集成。 在微前端技術棧中,Qiankun(乾坤)是一個廣泛使用的解決方案,基于 single…

在業務應用中集成 go-commons,實現應用+系統雙指標監控

在日常 Go 服務開發中&#xff0c;我們通常需要同時監控 業務指標&#xff08;比如 QPS、請求延遲、錯誤率&#xff09;&#xff0c;也需要關注 系統指標&#xff08;CPU、內存、磁盤占用情況&#xff09;。 過去這類場景通常要引入多個庫&#xff1a;一個負責業務指標采集&…

容器化部署番外篇之docker網絡通信06

一、四種網絡模式 Bridge模式&#xff1a;容器的默認網關&#xff0c;默認新建容器的網絡模式Host模式&#xff1a;容器和宿主機共用一個 Network&#xff0c;使用主機的IP:PORT就可以訪問容器&#xff0c;但安全性不高&#xff0c;用得少Container模式&#xff1a;這個模式指定…

Linux 線程的概念

序言&#xff1a; 在這篇博客中我們將講解線程的概念&#xff0c;如何理解線程&#xff0c;線程和進程的區別&#xff0c;線程的優缺點等&#xff0c;我相信你看完這篇博客后會以別樣的視角重新理解線程&#xff0c;下面的內容全部是基于Linux操作系統的。 一、線程的概念 1…