重学java 31.API 2.StringBuilder

总有一天,我不再畏惧任何人的离开                                       

                                                 —— 24.5.8

StringBuilder的介绍

1.概述

        一个可变的字符序列,此类提供了一个与StringBuffer兼容的一套API,但是不保证同步(线程不安全,效率高

2.作用

        主要是拼接字符串

3.问题

        a、String也能字符串拼接,直接使用“+”即可,为何还要用StringBuilder去拼接呢?

        b、原因:

                String每拼接一次,就会产生新的字符串对象,就会在堆内存中开辟新的空间,如果拼接次数多了,会占用内存,效率比较低

                StringBuilder,底层自带一个缓冲区(没有被final修饰的byte数组),拼接字符串之后都会在此缓冲区中保存,在拼接的过程中,不会产生新对象,节省内存

4.特点

        a、底层自带缓冲区,此缓冲区没有被final修饰的byte数组,默认长度为16

        b、如果超出了数组长度,数组会自动扩容

                创建一个新长度的新数组,将老数组的元素复制到新数组中,然后将新数组的地址值重新赋值给老数组

        c、默认每次扩容老数组的2倍+2

                如果一次性添加的数据超出了默认的扩容数组长度(2倍+2),比如存了36个字符,超出了第一次扩容的34,就按照实际数据个数为准,以36扩容,小于等于按默认,大于按实际

5.示例:

    public static void main(String[] args) {StringBuilder sb = new StringBuilder("111");sb.append("11111111111111111111111111111111111111");for (int i = 0; i < sb.length(); i++) {System.out.println(sb.charAt(i));System.out.println("这是第"+i+"次输出");}}

StringBuilder的使用

1.构造

        StringBuilder()

        StringBuilder(String str)

    public static void main(String[] args) {StringBuilder sb = new StringBuilder();System.out.println(sb);StringBuilder sb1 = new StringBuilder("abc");System.out.println(sb1);}

2.常用方法:

StringBuilder append(任意类型数据) —> 字符串拼接,返回的是StringBuilder自己

    public static void main(String[] args) {StringBuilder sb = new StringBuilder();StringBuilder sb1 = new StringBuilder("张晓明");System.out.println(sb);System.out.println(sb1);System.out.println(sb1==sb);System.out.println("——————————————————————————");// 链式调用StringBuilder sb2 = new StringBuilder();sb2 = sb.append("赵敏").append("周芷若").append("小昭");System.out.println(sb);System.out.println(sb2==sb);    //true}

StringBuilder reverse()->字符串翻转,返回的是StringBuilder自己

    public static void main(String[] args) {StringBuilder sb = new StringBuilder();StringBuilder sb1 = new StringBuilder("张晓明");System.out.println(sb);System.out.println(sb1);System.out.println(sb1==sb);System.out.println("——————————————————————————");// 链式调用StringBuilder sb2 = new StringBuilder();// 字符串添加sb2 = sb.append("赵敏").append("周芷若").append("小昭");System.out.println(sb);System.out.println(sb2==sb);    //trueSystem.out.println("——————————————————————————");// 字符串翻转sb.reverse();System.out.println(sb);}

String tostring() —> 将StringBuilder转成String —> 用StringBuilder拼接字符串是为了效率,为了不占内存,那么拼完之后我们后续可能会对拼接好的字符串进行处理,就需要调用String中的方法,所以需要将StringBuilder转为String

    public static void main(String[] args) {StringBuilder sb = new StringBuilder();StringBuilder sb1 = new StringBuilder("张晓明");System.out.println(sb);System.out.println(sb1);System.out.println(sb1==sb);System.out.println("——————————————————————————");// 链式调用StringBuilder sb2 = new StringBuilder();// 字符串添加sb2 = sb.append("赵敏").append("周芷若").append("小昭");System.out.println(sb);System.out.println(sb2==sb);    //trueSystem.out.println("——————————————————————————");// 字符串翻转sb.reverse();System.out.println(sb);System.out.println("——————————————————————————");// 可变字符串转定长字符串String s = sb.toString();System.out.println(s);}

3.练习

        练习1:

                键盘录入一个字符串,判断此字符串是否为"回文内容"

    public static void main(String[] args) {
//        1.创建Scanner对象Scanner sc = new Scanner(System.in);String data = sc.next();
//        2.创建StringBuilder对象StringBuilder sb = new StringBuilder(data);
//        3.reverse 字符串翻转sb.reverse();
//        4.将StringBuilder转为String,将可变字符串转为不可变字符串String s = sb.toString();
//        5.判断if (data.equals(s)){System.out.println("是回文内容");}else{System.out.println("不是回文内容");}}

        练习2

                定义一个数组,以[元素1,元素2,元素3..]的形式输出,用stringBuilder拼接

    // 定义一个数组,以[元素1,元素2,元素3..]的形式输出,用stringBuilder拼接public static void main(String[] args) {// 1.创建可变字符串StringBuilder sb = new StringBuilder();// 2.从键盘输入字符串Scanner sc = new Scanner(System.in);System.out.println("请您输入拼接的字符串");// 3.可变字符串接收输入的字符串sb.append(sc.nextLine());// 将可变字符串转变为字符串,然后去除空格String sb1 = sb.toString().replace(" ","");char[] arr = new char[sb1.length()];for (int i = 0; i < sb1.length(); i++) {arr[i] = sb1.charAt(i);}System.out.print("[");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}System.out.print("]");}

String:拼接字符串效率低,每拼接一次,都会产生一个新的字符串对象,耗费内存资源StringBuilderStringBuffer区别:
        a.相同点:
                用法一样,作用一样
        b.不同点:

                StringBuilder:拼接效率比StringBuffer高
                                    线程不安全
                StringBuffer:效率比较低,线程安全
                拼接效率:StringBuilder>StringBuffer>String

总结

String

1.概述

        代表的是字符串

2.特点

        a.凡是带双引号的,都是String的对象
        b.字符串是常量,他们的值在创建之后不能被更改
        c.srring对象是不可变的,所以可以共享

3.创建

        a.String0
        b.String(String s)
        c.sring(char[] chars)
        d.string(bytell bytes)

        e.string(char0] chars,int offset,int count)
                chars代表被转的数组
                ofset代表从数组的哪个索引开始转
                count代表转多少个

        f.String(bytel] bytes,int offset,int count)
                bytes代表被转的数组
                offset代表从数组的哪个素引开始转

                count代表转多少个

4.方法

a.判断方法

        ① boolean equals(Object obj) -- 判断字符串内容是否一样

        ② boolean equalslgnoreCase(Strings) -- 判断字符串内容是否一样,忽略大小写

b.获取方法

        ① int length() -- 获取字符串长度
        ② Slring concal(slring s)-- 拼接字符串,返回新串
        ③ char charAt(int index)-- 根据索引获取对应的字符
        ④ int indexOfstrings) -- 获取指定字符在字符串中第一次出现的素引位置
        ⑤ String subString(int beginIndex) -- 从beginIndex开始截取字符串到最后
        ⑥ String substring(int beginindex,int endindex) -- 从beginIndex到endIndex截取字符串,含头不含尾

c.转换方法

        ① char[] toCharArray() -- 将字符串转成char数组

        ② byte[] getBytes0 -- 将字符串转成byte数组
        ③ bytell getBytes(Sting charsetName) -- 按照指定的编码规则将字符串转成byte数组

        ④ String replace(c1,c2) -- 将c1替换成c2

d.分割方法

        ① String[] split(string regex) -- 按照指定规则分割字符串

e.其他方法

        ① boolean contains(String s) -- 判断字符串是否包含指定的字符串内容
        ② boolean endsWith(string s) -- 判断字符串是否以指定的串儿结尾

        ③ boolean startsWith(String s) -- 判断字符串是否以指定的串儿开头
        ④ String toLowerCase() -- 将字母转成小写
        ⑤ String toUpperCase() -- 将字母转成大写
        ⑥ String trim() -- 去掉字符串两端空格

StringBuilder

1.概述

        可变的字符序列

2.特点

        自带缓冲区,拼接字符串不会随意产生新对象!

3.常用方法

        a.StringBuilder append(任意类型)- 字符串拼接,返回自己

        b.StringBuilder reverse0 -- 字符串内容翻转,返回自己
        c.String toString() -- 将StringBuilder转成String

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 6.7 正式发布!

本文翻译自&#xff1a;Qt 6.7 Released! 原文作者&#xff1a;Qt Group研发总监Volker Hilsheimer 在最新发布的Qt 6.7版本中&#xff0c;我们大大小小作出了许多改善&#xff0c;以便您在构建现代应用程序和用户体验时能够享受更多乐趣。 部分新增功能已推出了技术预览版&a…

scikit-learn多因子线性回归预测房价

1.首先是单因子线性回归预测房价 import numpy as np import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score# 1.读取csa房屋数据 path D:/pythonDATA/us…

地道俄语口语,柯桥俄语培训哪家好

1、по-моему 依我看&#xff1b;在我看来 例&#xff1a; По-моему, сегодня будет дождь. 依我看, 今天要下雨。 Сделай по-моему. 按我的办法干吧 2、кажется 似乎是&#xff1b;看起来 例&#xff1a; Парень, …

mvc区域、Html.RenderAction、Html.RenderPartial、 模板、section

根据上图 Html.RenderPartial 与 Html.RenderAction 区别 RenderAction 会把对应的视图结果渲染 RenderPartial 会把html视图直接渲染 模板

mysql binlog 如何区分db

binlog不是InnoDB存储引擎特有的日志文件&#xff0c;是属于mysql server自己的日志文件。 提交事务的时候&#xff0c;同时会写入binlog 在MySQL中&#xff0c;Binary Log&#xff08;binlog&#xff09;记录了数据库更改操作的所有细节&#xff0c;对于实现数据复制、恢复以…

java 语言写一个装饰器模式代码

装饰器模式&#xff08;Decorator Pattern&#xff09;允许你动态地给一个对象添加一些额外的职责。就增加功能来说&#xff0c;装饰器模式相比生成子类更为灵活。下面是一个简单的 Java 装饰器模式的示例代码&#xff1a; 首先&#xff0c;我们定义一个接口 Component&#x…

The 2021 Sichuan Provincial Collegiate Programming Contest

The 2021 Sichuan Provincial Collegiate Programming Contest The 2021 Sichuan Provincial Collegiate Programming Contest A. Chuanpai 题意&#xff1a;给出总值k&#xff0c;将k分成xyk&#xff0c;x和y均小于7&#xff0c;最多分成多少组。 思路&#xff1a;暴力跑一…

【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT

本文参加百度的有奖征文活动&#xff0c;更主要的也是借此机会去体验一下 AI 生成 PPT 的产品的现状&#xff0c;因此本文是设身处地从用户的角度去体验、使用这个产品&#xff0c;并反馈最真实的建议和意见&#xff0c;除了明确该产品的优点之外&#xff0c;也发现了不少缺陷和…

实战Java虚拟机-基础篇

JVM的组成 一、自动垃圾回收 1.Java的内存管理 Java中为了简化对象的释放&#xff0c;引入了自动的垃圾回收&#xff08;Garbage Collection简称GC&#xff09;机制。通过垃圾回收器来对不再使用的对象完成自动的回收&#xff0c;垃圾回收器主要负责对堆上的内存进行回收。其…

vue项目基于WebRTC实现一对一音视频通话

效果 前端代码 <template><div class"flex items-center flex-col text-center p-12 h-screen"><div class"relative h-full mb-4 fBox"><video id"localVideo"></video><video id"remoteVideo">…

firewall-cmd --list-all详解

含义 在 firewall-cmd --list-all 命令的输出结果中&#xff0c;涉及到的每行的含义如下&#xff1a; “target”&#xff1a;表示当前 Firewalld 防火墙的默认目标&#xff0c;可以是 “ACCEPT”、“DROP” 或 “REJECT”。 “DROP”&#xff0c;表示拒绝所有流量&#xff1…

App拍照,照片压缩存储到app内部,同步更新手机系统相册

H5页面调用安卓相机拍照&#xff0c;然后在H5页面显示&#xff1a; 1、H5调用相机的回调&#xff1a; binding.fragmentWebWebview.setWebChromeClient(new WebChromeClient() {Overridepublic boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePa…

2024Windows11最新安装pyspider

1、创建conda虚拟环境 conda create -n _pyspider python==3.6虚拟环境建好后会自动有 wheel库2、配置phantom浏览器 参考phantom安装 3、conda安装pycurl conda install pycurl4、一次性安装各种依赖 requirements.txt内容如下: Flask==0.10 Jinja2==2.7 chardet==3.0.…

【MQTT】服务端、客户端工具使用记录

目录 一、服务端 1.1 下载 1.2 相关命令 &#xff08;1&#xff09;启动 &#xff08;2&#xff09;关闭 &#xff08;3&#xff09;修改用户名和密码 1.3 后台管理 &#xff08;1&#xff09;MQTT配置 &#xff08;2&#xff09;集群概览 &#xff08;3&#xff09;…

livox雷达斜装修改

fast_lio中的mid360.yaml中的外参 extrinsic_est_en: false # true: enable the online estimation of IMU-LiDAR extrinsicextrinsic_T: [ -0.011, -0.02329, 0.04412 ]extrinsic_R: [ 1, 0, 0,

基于内容的推荐方法有哪些实施难点

1、特征提取的复杂性&#xff1a; 基于内容的推荐方法依赖于从用户行为和物品属性中提取的有效特征。然而&#xff0c;对于文本、视频、音频等多媒体内容&#xff0c;特征提取往往较为复杂&#xff0c;需要专业的领域知识和高效的算法。此外&#xff0c;提取的特征的质量直接影…

如何使用SkyWalking收集分析分布式系统的追踪数据

Apache SkyWalking 是一个开源的观测性工具&#xff0c;用于收集、分析和展示分布式系统的追踪数据。SkyWalking 支持多种语言的追踪&#xff0c;包括但不限于 Java、.NET、Node.js 等。以下是使用 SkyWalking 工具实现数据采集的详细步骤&#xff1a; 1. 下载和安装 SkyWalkin…

数据挖掘算法原理与实践:决策树

第2关&#xff1a;决策树算法原理 任务描述 本关任务&#xff1a;根据本关所学知识&#xff0c;完成 calcInfoGain 函数。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 信息熵&#xff1b;条件熵&#xff1b;信息增益。 信息熵 信息是个很抽象的概念。…

代码随想录算法训练营第六十一天| 739. 每日温度,496.下一个更大元素 I

题目与题解 739. 每日温度 题目链接&#xff1a;739. 每日温度 代码随想录题解&#xff1a;739. 每日温度 视频讲解&#xff1a;单调栈&#xff0c;你该了解的&#xff0c;这里都讲了&#xff01;LeetCode:739.每日温度_哔哩哔哩_bilibili 解题思路&#xff1a; 最好想的就是暴…

Flink面试整理-Flink常见API

Apache Flink 提供了多种 API,使开发者能够方便地实现复杂的数据处理和分析任务。以下是 Flink 中一些常见的 API: DataStream API:用于构建实时流处理应用程序。支持事件时间(Event Time)、摄取时间(Ingestion Time)和处理时间(Processing Time)的概念。提供丰富的操…