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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…