【数据结构与算法初学者指南】【冲击蓝桥篇】String与StringBuilder的区别和用法

 🎉🎉欢迎光临🎉🎉

🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀

🌟特别推荐给大家我的最新专栏《数据结构与算法:初学者入门指南》📘📘

本专栏纯属为爱发电永久免费!!!

这是苏泽的个人主页可以看到我其他的内容哦👇👇

努力的苏泽icon-default.png?t=N7T8http://suzee.blog.csdn.net

四月份就准备蓝桥杯咯 为了冲击国赛 博主这段时间日夜刷题 但发现光刷没有 还是得把学习到的东西记录下来  于是打算专门做一篇冲击蓝桥篇的专栏 作为蓝桥复习过程中 易出错的知识点补充和学习 里面会有刷题的笔记 希望能够记录学习之路

那么正片开始

目录

String、StringBuilder区别

StringBuilder 类的特点和用法:

StringBuilder 是 Java 提供的用于处理可变字符串的类。它具有以下特点:

String 和 StringBuilder 的选择:选择使用 String 还是 StringBuilder 取决于具体的需求:

思路分析:

代码实现+详细注释:


String、StringBuilder区别

String 和 StringBuilder 是两个常见的字符串处理类。尽管它们都用于处理字符串,但它们在性能和使用方式上存在一些重要的区别。本文将介绍 String 和 StringBuilder 的区别,以及它们的用法和常见应用场景,帮助读者更好地理解和选择适当的类来处理字符串。

一、String 类的特点和用法:
String 类是 Java 中最常用的字符串类之一。它具有以下特点:

  1. 不可变性:String 对象一旦被创建,其值就不能被修改。每次对 String 对象进行操作时,都会创建一个新的 String 对象。
  2. 线程安全:由于 String 对象的不可变性,它可以被多个线程同时访问而不会出现并发问题。
  3. 应用场景:String 适用于字符串不经常改变的情况,比如字符串的拼接、比较、查找等操作。

常见用法示例:

字符串拼接:

String str = "Hello";
str += " World";

 字符串比较:

String str1 = "Hello";
String str2 = "World";
boolean isEqual = str1.equals(str2);

 字符串查找:

String str = "Hello World";
int index = str.indexOf("World");

StringBuilder 类的特点和用法:

StringBuilder 是 Java 提供的用于处理可变字符串的类。它具有以下特点:

  1. 可变性:StringBuilder 对象的值可以被修改,而不会创建新的对象。这使得在频繁修改字符串的情况下,StringBuilder 的性能更高。
  2. 非线程安全:StringBuilder 不是线程安全的,如果多个线程同时访问同一个 StringBuilder 对象,可能会导致数据不一致或并发问题。
  3. 应用场景:StringBuilder 适用于需要频繁修改字符串的情况,比如字符串的拼接、替换、插入等操作。

常见用法示例

字符串拼接:

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World");
String result = sb.toString();

字符串替换:

StringBuilder sb = new StringBuilder("Hello World");
sb.replace(6, 11, "Java");
String result = sb.toString();

字符串插入:

StringBuilder sb = new StringBuilder("Hello");
sb.insert(5, " World");
String result = sb.toString();

String 和 StringBuilder 的选择:
选择使用 String 还是 StringBuilder 取决于具体的需求:

  • 如果字符串的值不会频繁改变,或者在多线程环境下使用,建议使用 String 类,因为它是不可变的和线程安全的。
  • 如果字符串需要频繁修改,并且在单线程环境下使用,建议使用 StringBuilder,因为它具有可变性和更高的性能。

但蓝桥杯基本都是针对单线程环境下编程的 所以 StringBuilder就很有优势 

下面分享一道洛谷的题 作为这篇的参考

链接:https://www.luogu.com.cn/problem/B3640

思路分析:

  1. 首先,使用Scanner类从标准输入读取一行句子,并将其存储在字符串s中。
  2. 然后,将字符串s转换为字符数组c,方便逐个处理字符。
  3. 你创建了两个StringBuilder对象,ans用于存储倒序输出的结果,a用于处理每个单词。
  4. 在一个循环中,从字符数组c的最后一个字符开始遍历。
    • 如果当前字符是空格,表示一个单词的结束,需要处理a中的字符并将其插入到ans中。首先检查a是否为空,然后判断第一个字符是否为数字,如果是数字,则将a进行反转(翻转自然数)。
    • 将a转换为字符串并追加到ans中,然后重置a为一个新的StringBuilder对象。
    • 如果当前字符不是空格,表示一个单词的继续,你需要将其插入到a的开头。在插入之前,检查当前字符是否为字母,如果是字母,则将其转换为相反的大小写形式,并插入到a中。
  5. 循环结束后,再次检查a是否为空,如果不为空,则表示最后一个单词需要处理,你执行与空格处相同的操作。
  6. 将a转换为字符串并追加到ans中。
  7. 最后,打印出ans作为结果。

代码实现+详细注释:

public static void main(String[] args) {Scanner in = new Scanner(System.in);String s = in.nextLine();char[] c = s.toCharArray();//每一个字符 都是一个数组元素StringBuilder ans = new StringBuilder();StringBuilder a = new StringBuilder();for (int i = c.length - 1; i >= 0; i--) {if (c[i] == ' ') {//输入的字符串轮到空格的时候 就去处理a当中的字符 如果是字母就不用管 因为是转为大写再插入进来的 如果是数字 就把他翻转并插入到答案字符串中if (a.length() != 0) {int k = a.charAt(0) - '0';if (k >= 0 && k <= 9) {a.reverse();}}ans.append(a.toString() + " ");a = new StringBuilder();} else {//字符串不是空格char x = c[i];// 判断是不是字母if ((c[i] >= 'a' && c[i] <= 'z') || (c[i] >= 'A' && c[i] <= 'Z')) {//把字母变为反转x ^= 32;}//放入待处理的字符串中a.insert(0, x);}}if (a.length() != 0) {//这里处理的是最后一个单词int k = a.charAt(0) - '0';if (k >= 0 && k <= 9) {a.reverse();}}ans.append(a);System.out.println(ans);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2806442.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【 JS 进阶 】Web APIs (一)

“生命是一曲奇妙的交响&#xff0c;每一段都是挑战&#xff0c;每一个音符都是机遇。在激情的旋律中&#xff0c;用勇气弹奏&#xff0c;创造出属于自己的华彩人生。” - 贝多芬 了解 DOM 的结构并掌握其基本的操作&#xff0c;体验 DOM 的在开发中的作用 知道 ECMAScript 与 …

基于SpringBoot的家教管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatis工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 前台主页 家教 个人中心 管理员界面 摘要 本文介绍了基于SpringBoot框架开发的家…

【深度学习笔记】3_5 图像分类数据集fashion-mnist

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.5 图像分类数据集&#xff08;Fashion-MNIST&#xff09; 在介绍softmax回归的实现前我们先引入一个多类图像分类数据集。它将在后面的章节中被多次使用&#xff0c…

论文是怎么一回事

最近找到女朋友了&#xff0c;她还挺关心我毕业和论文的事情&#xff0c;我开始着手弄论文了~ 说来惭愧&#xff0c;我一直以为读研就是做东西当作工作来完成&#xff0c;结果一直陷入如何实现的问题&#xff0c;结果要论文时不知道怎么弄创新点&#xff0c;这才转过头来弄论文…

信号系统之线性图像处理

1 卷积 图像卷积的工作原理与一维卷积相同。例如&#xff0c;图像可以被视为脉冲的总和&#xff0c;即缩放和移位的delta函数。同样&#xff0c;线性系统的特征在于它们如何响应脉冲。也就是说&#xff0c;通过它们的脉冲响应。系统的输出图像等于输入图像与系统脉冲响应的卷积…

重点媒体如何投稿?考核稿件投稿指南

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 机构组织&#xff0c;国企央企都需要定期将相关新闻投递到央媒&#xff0c;官媒&#xff0c;或者地方重点媒体中&#xff0c;那么如何进行投稿了&#xff0c;今天就与大家分享下。 央媒投…

喝多少瓶汽水

喝多少瓶汽水 题目描述&#xff1a;解法思路&#xff1a;解法代码&#xff1a;运行结果: 题目描述&#xff1a; 水已知1瓶汽水1元&#xff0c;2个空瓶可以换⼀瓶汽水&#xff0c;输入整数n&#xff08;n>0&#xff09;&#xff0c;表示n元钱&#xff0c;计算可以多少汽水&a…

《Docker 简易速速上手小册》第2章 容器和镜像(2024 最新版)

文章目录 2.1 理解 Docker 容器2.1.1 重点基础知识2.1.2 重点案例&#xff1a;使用 Docker 运行 Python 应用2.1.3 拓展案例 1&#xff1a;Docker 中的 Flask 应用2.1.4 拓展案例 2&#xff1a;Docker 容器中的数据分析 2.2 创建与管理 Docker 镜像2.2.1 重点基础知识2.2.2 重点…

力扣 169. 多数元素

思路&#xff1a; 因为题目说一定存在多数元素&#xff0c;就说明一定有一个数的个数多于n/2 将数组采用冒泡从小到大排序&#xff0c;最中间的那个元素一定是多数元素&#xff08;因为在大小排好序后&#xff0c;中位数也一定是众数&#xff09; 答案&#xff1a; int maj…

Xcode中App图标和APP名称的修改

修改图标 选择Assets文件 ——> 点击Applcon 换App图标 修改名称 点击项目名 ——> General ——> Display Name

C++中的STL数据结构

内容来自&#xff1a;代码随想录&#xff1a;哈希表理论基础 1.常见的三种哈希结构 当我们想使用哈希法来解决问题的时候&#xff0c;我们一般会选择如下三种数据结构 数组 set &#xff08;集合&#xff09; map(映射) 在C中&#xff0c;set 和 map 分别提供以下三种数据结构…

C++ 学习之Map容器

C++ Map容器概念 C++的Map容器是一种关联容器,它提供了一种将键和值相关联的方式。它以键值对的形式存储数据,并根据键的顺序自动进行排序。 Map中的键是唯一的,而值可以重复。你可以使用键来访问对应的值,就像使用索引访问数组中的元素一样。 Map容器的特点如下: 按照…

leetcode单调栈

739. 每日温度 请根据每日 气温 列表&#xff0c;重新生成一个列表。对应位置的输出为&#xff1a;要想观测到更高的气温&#xff0c;至少需要等待的天数。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列表 temperatures [73, …

29. 【Linux教程】Linux 用户介绍

本小节介绍 Linux 用户的基础知识&#xff0c;了解 Linux 系统中有哪些用户&#xff0c;如何查看当前 Linux 系统中有哪些用户&#xff0c;每一个 Linux 用户的权限取决于这些账号登录时获取到的权限。 1. Linux 用户类型 Linux 系统是一个多用户多任务的操作系统&#xff0c;…

服务内存优化思路

【需求背景】 由于某个服务在访问量不大的情况下&#xff0c;出现频繁的 full gc&#xff0c;配置内存为 1.5g&#xff0c;但是还是不够用&#xff0c;经常占用在 1.3g 左右。 【内存分析】 1、使用 MAT 对 dump 日志进行分析 通过 dominator-tree 可以看出 java.lang.Thread…

145.二叉树的后序遍历

// 定义一个名为Solution的类&#xff0c;用于解决二叉树的后序遍历问题 class Solution { // 定义一个公共方法&#xff0c;输入是一个二叉树的根节点&#xff0c;返回一个包含后序遍历结果的整数列表 public List<Integer> postorderTraversal(TreeNode root) { /…

【开源】JAVA+Vue.js实现考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

高级统计方法 第4次作业

作业评阅&#xff1a; 概念 2.问题 KNN分类和KNN回归都是KNN算法在不同类型数据上的应用&#xff0c;但它们之间存在明显的区别。 解决的问题类型不同&#xff1a;KNN分类适用于解决分类问题&#xff0c;而KNN回归则适用于解决回归问题。当响应变量是连续的&#xff0c;根据…

我花了5天时间,开发了一个在线学习的小网站

大三寒假赋闲在家&#xff0c;闲来无事&#xff0c;用了5天时间做了一个在线学习的小网站&#xff0c;一鼓作气部署上线&#xff0c;制作的过程比较坎坷。内心经历过奔溃&#xff0c;也经历过狂喜。 按照惯例先放出网址&#xff0c;欢迎大家来访问学习&#xff1a;www.pbjlove…

大离谱!AI写作竟让孔子遗体现身巴厘岛,看完笑不活了

大家好&#xff0c;我是二狗。 这两天我在知乎上看到了一个AI写作大翻车的案例&#xff0c;看完简直笑不活了&#xff0c;特地分享给大家一起 happy happy&#xff5e; 知乎网友“打开盒子吓一跳”一上来就抛出来了一个“孔子去世”的王炸。 首先&#xff0c;下面是一条真实新…