重学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视图直接渲染 模板

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">…

【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;…

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

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

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

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

风电厂数字孪生3D数据可视化交互展示构筑智慧化电厂管理体系

随着智慧电厂成为未来电力企业发展的必然趋势&#xff0c;深圳华锐视点紧跟时代步伐&#xff0c;引领技术革新&#xff0c;推出了能源3D可视化智慧管理系统。该系统以企业现有的数字化、信息化建设为基础&#xff0c;融合云平台、大数据、物联网、移动互联、机器人、VR虚拟现实…

Android 右键 new AIDL 无法选择

提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file&#xff09; 解决方式&#xff1a; 在app的build.gradl中 adnroid{} 添加&#xff1a; buildFeatures{aidl true}

Oracle-一次TX行锁堵塞事件

问题背景&#xff1a; 接用户问题报障&#xff0c;应用服务出现大量会话堆积现象&#xff0c;数据库锁堵塞严重&#xff0c;需要协助进行问题定位和排除。 问题分析&#xff1a; 登录到数据库服务器上&#xff0c;首先查看一下数据库当前的等待事件情况&#xff0c;通过gv$ses…

教你零成本,免费使用comfyui复现remini爆火的黏土风格转绘(附完整教程)

在五一假期期间,一款名为Remini的AI照片编辑软件在小红书上迅速走红,其独特的“丑萌”黏土风格滤镜深受广大博主和用户的喜爱,引发了一波热潮,让人们玩得不亦乐乎。 Remini软件提供的这种视觉效果虽然看起来有点“丑萌”特效,然而,正是这种独树一帜的画风,使得Remini迅速…

【Django学习笔记(十)】Django的创建与运行

Django的创建与运行 前言正文1、安装Django2、创建项目2.1 基于终端创建项目2.2 基于Pycharm创建项目2.3 两种方式对比 3、默认项目文件介绍4、APP5、启动运行Django5.1 激活App5.2 编写URL和视图函数对应关系5.3 启动Django项目5.3.1 命令行启动5.3.2 Pycharm启动5.3.3 views.…

C++缺省参数、函数重载、引用

一、缺省参数 1.1缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void func(int n 0) {cout << n << endl; }int main() {func();func…

【经验01】spark执行离线任务的一些坑

项目背景: 目前使用spark跑大体量的数据,效率还是挺高的,机器多,120多台的hadoop集群,还是相当的给力的。数据大概有10T的量。 最近在出月报数据的时候发现有一个任务节点一直跑不过去,已经超过失败次数的阈值,报警了。 预警很让人头疼,不能上班摸鱼了。 经过分析发现…

Apache Knox 2.0.0使用

目录 介绍 使用 gateway-site.xml users.ldif my_hdfs.xml my_yarn.xml 其它 介绍 The Apache Knox Gateway is a system that provides a single point of authentication and access for Apache Hadoop services in a cluster. The goal is to simplify Hadoop securit…

LANCET:常见统计使用错误+规避建议!

国际顶级医学期刊《柳叶刀》&#xff08;The Lancet&#xff09;最近发表了一篇实用的通讯文章&#xff08;Correspondence&#xff09;&#xff0c;该篇Correspondence基于过去3年内对提交给《柳叶刀》的1000多篇manuscripts进行审核的经验&#xff0c;总结了科研report中常见…