重学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.hqwc.cn/news/681650.html

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

相关文章

网页主题自动适配:网页跟随系统自动切换主题

主题切换是网站设计中一个非常有趣的功能&#xff0c;它允许用户在多种预先设计的样式之间轻松切换&#xff0c;以改变网站的视觉表现。最常见的就是白天和黑夜主题的切换&#xff0c;用户可以根据自己的喜好进行设置。 除了让用户手动去切换主题外&#xff0c;如果能够让用户第…

传输商业密码电子文件的优选文件传输平台

在数字化浪潮的推动下&#xff0c;企业对机密信息的保护显得尤为关键。商业机密文件的传输不仅是企业运作的基础&#xff0c;更是企业竞争力的体现。面对日益增长的数据量和复杂的网络威胁&#xff0c;企业如何确保文件在传输过程中的安全&#xff0c;成为了一个亟待解决的问题…

今年做电商,视频号小店绝对是明智之举,未来风口就在这里

大家好&#xff0c;我是电商笨笨熊 电商一直是近几年的热门创业方向&#xff1b; 但是面对众多电商平台&#xff0c;对于普通玩家的我们来说&#xff0c;该怎么选择呢&#xff1f; 今年来说&#xff0c;我会更愿意选择视频号小店。 作为一个腾讯推出的电商项目&#xff0c;…

风味之旅:精酿啤酒的IPA风格探索

啤酒的世界是丰富多彩的&#xff0c;而IPA&#xff08;印度淡色艾尔&#xff09;作为一种与众不同的啤酒风格&#xff0c;以其浓郁的口感和与众不同的香气深受啤酒爱好者的喜爱。Fendi club啤酒作为精酿啤酒的品牌&#xff0c;对IPA风格的探索从未停止。 首先&#xff0c;让我们…

软件项目管理期末复习题8-16章

第八章软件项目质量计划 一、填空题 1、&#xff08;审计&#xff09;是对过程或产品的一次独立质量评估。 2、质量成本包括预防成本和&#xff08;缺陷成本&#xff09;。 3、&#xff08;软件质量&#xff09;是软件满足明确说明或者隐含的需求的程度。 5、McCall质量模…

隔离流量优化网络传输

不要将长流和短突发流(或者大象流和老鼠流)混部在一起&#xff0c;我建议用切片或虚通道将它们在全链路范围彻底隔离&#xff0c;而不仅仅在交换机上配合着大肆宣讲的高端包分类算法配置一些排队调度。 也不必扯泊松到达&#xff0c;帕累托分布&#xff0c;这些概念在论文建模…

学习CSS3动画教程:手把手教你绘制跑跑卡丁车

学习之前&#xff0c;请先听一段音乐&#xff1a;等登&#xff0c;等登&#xff0c;等登等登等登&#xff01;没错&#xff0c;这就是我们当年玩的跑跑卡丁车的背景音乐&#xff0c;虽然后来有了QQ飞车&#xff0c;但还是更喜欢跑跑卡丁车&#xff0c;从最初的基础板车&#xf…

ATFX汇市:英央行5月利率决议维持5.25%利率不变概率较高

ATFX汇市&#xff1a;英国央行将于今日19:00公布5月利率决议结果&#xff0c;市场普遍预期其将维持5.25%的基准利率不变。英国央行行长贝利将于今日19:30召开货币政策新闻发布会&#xff0c;如果表态偏鹰&#xff0c;英镑币值将受到提振。从英国央行基准利率的走势图来看&#…

可视化智慧校园:山海鲸的全面解析

在数字化浪潮席卷全球的今天&#xff0c;教育领域的变革也势不可挡。山海鲸可视化智慧校园解决方案&#xff0c;以其独特的创新理念和强大的技术支撑&#xff0c;为校园信息化建设提供了全新的视角和解决方案。 一、方案概述 山海鲸可视化智慧校园解决方案是一套集数据分析、…

netsh命令

netsh是本地或远程计算机Windows 2000网络组件的命令行和脚本实用程序。为了存档或配置其他服务器&#xff0c;netsh实用程序也可将配置脚本保存在文本文件中。netsh实用程序是一个外壳&#xff0c;通过附加的“netsh帮助DLL”可支持多个Windows 2000组件。 有两种方式可以运行…

MySQL mysqldump备份恢复

目录 1. 备份类型 2. 逻辑备份VS物理备份 3. mysqldump工具 3.1 备份命令格式 3.2 备份选项 3.3 备份全库(结构和数据) 3.4 备份全库(仅结构) 3.5 备份全库(仅数据) 3.6 备份单个数据库(结构和数据) 3.7 备份单个数据库(仅结构) 3.8 备份单个数据库(仅数据) 3.9…

容联云孔淼:大模型落地与全域营销中台建设

近日&#xff0c;由金科创新社主办的2024区域性商业银行数智化转型研讨会顺利召开&#xff0c; 容联云产业数字云事业群副总经理、诸葛智能创始人孔淼受邀出席&#xff0c;并分享数智化转型实践经验。 他分享了容联云两大核心产品&#xff0c;“大模型应用容犀Copilot”在金融营…