StringBuffer类详解

news2024/10/6 5:58:59

StringBuffer

定义

1.java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删

2.很多方法与String相同,但StringBuffer是可变长度的。
3.StringBuffer是一个容器。

String和StringBuffer的不同

1.String保存的是字符串常量,里面的值不嫩更改,每次String的更新实际上就是更改地址,效率较低

String类的常量定义: private final char value[];

2.StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址,效率较高

StringBuffer字符串变量定义: char][] value;放在堆

String和StringBuffer的互相转换

package string;

public class StringBufer01 {
    public static void main(String[] args) {
        //String --> StringBuffer
        String str = "sad";
        //1.使用构造器
        StringBuffer stringBuffer = new StringBuffer(str);
        System.out.println(stringBuffer);
        //2.使用append方法
        StringBuffer stringBuffer1 = new StringBuffer();
        stringBuffer1 = stringBuffer1.append(str);

        //StringBuffer ---> String
        StringBuffer stringBuffer2 = new StringBuffer("你好");
        //1。利用StringBuffer对象的toString方法
        String str2 = stringBuffer2.toString();
        System.out.println(str2);
        //2.利用构造器
        String str3 = new String(stringBuffer2);
        System.out.println(str3);

    }
}

StringBuffer类的常用方法

1.增 append

2.删delete(start,end)

3.改replace(start,end,String)

4.查indexOf 查找字符串第一次出现的位置,找不到返回-1

5.插入 insert

6.获取长度length

package string;

public class StringBuffer02 {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer("hello,java");
        System.out.println(stringBuffer);
        //1.增 append
        stringBuffer.append(",I am wulian");
        System.out.println(stringBuffer);
        //2.删delete(start,end)
        stringBuffer.delete(0,2);
        System.out.println(stringBuffer);
        //3.改replace(start,end,String)
        stringBuffer.replace(0,3,"hhh");
        System.out.println(stringBuffer);
        //4.查indexOf  查找字符串第一次出现的位置,找不到返回-1
        System.out.println(stringBuffer.indexOf("java"));
        //5.插入 insert
        stringBuffer.insert(1,'a');
        System.out.println(stringBuffer);
        //6.获取长度length
        System.out.println(stringBuffer.length());
    }
}

编译结果

在这里插入图片描述

测试

package string;

public class StringBufferTest {
    public static void main(String[] args) {
        String str = null;
        StringBuffer stringBuffer = new StringBuffer();
        System.out.println(stringBuffer.length());
        stringBuffer.append(str);
        System.out.println(stringBuffer.length());
        StringBuffer stringBuffer1 = new StringBuffer(str);
        System.out.println(stringBuffer.length());
    }
}

编译结果
在这里插入图片描述

分析

使用append方法是将null作为字符串添加到char[]中,故数组长度为4

但是使用StringBuffer构造器是将String对象作为参数传入,但是此时str为空,故出现了空指针异常
在这里插入图片描述

​ 如图所示 str为空,str.length() + 16 会报错

联系

输入商品名称和商品价格,要求打印效果示例,使用前面学习的方法完成商品名商品价格
手机123,564.59 1/比如价格3.456,789.88
要求:价格的小数点前面每三位用逗号隔开,在输出。

package string;

import java.util.Scanner;

public class StringBufferTest {
    public static void main(String[] args) {
      /*String price = "13123.342";
      StringBuffer stringBuffer = new StringBuffer(price);
        int  i = stringBuffer.indexOf(".");
        System.out.println(i);
        stringBuffer.insert(i-3,',');
        System.out.println(stringBuffer);*/

        String phone = new String("手机");
        String price = new Scanner(System.in).next();
        StringBuffer stringBuffer = new StringBuffer(price);
        for (int i = stringBuffer.lastIndexOf(".") -3; i > 0; i -= 3){
            stringBuffer.insert(i,',');
        }
        System.out.print(phone + "  ");
        System.out.println(stringBuffer);
    }
}

编译结果
在这里插入图片描述

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

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

相关文章

机器学习——用KNN解决非线性回归问题

问:k最近邻分类模型是非线性模型。 答:正确。k最近邻分类模型是非线性模型,因为它的决策边界是由最近邻居点的类别决定的,而最近邻居点的分布通常是不规则的,因此决策边界也就不是线性的。因此,k最近邻分类…

继续【Stable-Diffusion WEBUI】方方面面研究(内容索引)

文章目录 (零)前言(一)绘图(1.1)模型(1.1.1)基础模型(Stable-diffusion模型)(1.1.2)人物模型(LoRA模型) &…

我在公司彻夜撸码,老板天天开X6夜店蹦迪,到头来工资还拖欠

讲道理,我的学历远达不到BAT等名企大厂的要求,去不了好公司我认了,大专毕业的我在找工作的时候发现留给自己的机会并不多,最后去了一家不知名的小公司。入职后才发现这家公司其实就是个外包公司,里面的业务部门和制度相…

【RPA开发】Selenium 实现网页自动化

开发时有时会遇到网页爬取限制的情况,那么此时可以通过 Selenium 来解决这个问题,因为 Selenium 是模拟浏览器执行网页爬取,相比 Request/API 操作更安全,服务器会完全认为是用户在用浏览器进行操作,如此可以实现网页自…

centos7环境下:DolphinScheduler3.1.5简介和伪集群模式安装部署

centos7环境下:DolphinScheduler3.1.5简介和伪集群模式安装部署 DolphinScheduler简介 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用…

Quartz定时任务

基本介绍 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个、百个、甚至是好几万个Jobs这样复杂的日程序表,Jobs可以做成标准的Java组件或EJBs Qua…

android framework-ActivityManagerService(AMS)下

一、ActivityThread \frameworks\base\core\java\android\app\ActivityThread.java 1.1、main public static void main(String[] args) {Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "ActivityThreadMain");// Install selective syscall interceptionAnd…

java native 方法编写

目录 前言 1、创建 java native 方法 2、创建洞态链接库项目 3、加载 dll 文件 前言 Java 提供了调用 C 或 C 函数的方法,这种方法就是 native 方法,全称 Java Native Interface (JNI) 1、创建 java native 方法 1)新建 java 类文件 …

【CMake】如何使用CMake构建一个工程

1.如何使用CMake构建一个工程 1. 使用 CMakelists.txt 构建工程 一个最简单 CMake 的项目是将某个源文件构建成为可执行文件,使用CMake 构建项目时,你需要创建一个 CMakeLists.txt 文件,通常情况下,下面三条命令在每个 CMakeLis…

四结4.20

这俩天实现了分离客服端和服务端, 先将对象序列化,通过socket从客户端发送到服务端,反序列化 进行数据库操作,最后向客户端返回结果,渲染javafx的画面 中途遇到俩种异常,因为一报错弹出一大段红色的英语…

力扣sql中等篇练习(九)

力扣sql中等篇练习(九) 1 电影评分 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 只要一个 可以考虑order by加上 limit的组SELECT子句中子查询的结果 # 电影名称和姓名不可能重复,所以直接Union a…

【RecyclerView】同时刷新和滚动导致,滚动位置异常(一)

前置: 被选中item高度与非选中item高度不一致,且硬件有点卡,运行会有一定卡顿。 可视界面的item为三个,总数据为十个。 期望效果: 》 实际上效果: 代码: mListAdapter.setSelectedPosition(…

学成在线笔记+踩坑(6)——【媒资模块】视频处理。FFmpeg+XXL-JOB

导航: 【黑马Java笔记踩坑汇总】JavaSEJavaWebSSMSpringBoot瑞吉外卖SpringCloud黑马旅游谷粒商城学成在线牛客面试题 目录 1 视频转码需求 1.1 视频编码格式和文件格式 1.2 windows使用编码工具FFmpeg 1.3 视频处理工具类 1.3.1 拼装FFmpeg命令的各工具类 1…

复旦MOSS大模型开源了「中国版ChatGPT」,Github和Hugging Face同时上线

最近,ChatGPT非常火,从ChatGPT3到ChatGPT4,都非常火。无论是否为互联网行业的,多少都听到过关于ChatGPT的消息。虽然百度、阿里等互联网巨头都已经宣布将会推出相关的类ChatGPT产品。但目前还未有成型的产品上线。 而昨日&#x…

94. 二叉树的中序遍历【119】

难度等级:容易 上一篇算法: 102. 二叉树的层序遍历【206】 力扣此题地址: 94. 二叉树的中序遍历 - 力扣(Leetcode) 1.题目:94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序…

AlgoC++第四课:逻辑回归

目录 逻辑回归前言1. 鸢尾花分类问题1.1 基于线性回归的思考1.2 损失函数 2. 伯努利分布3. 示例代码3.1 数据可视化3.2 日志信息打印3.3 数据读取和处理3.4 逻辑回归模型3.5 完整示例代码3.6 python实现 4. 思考总结 逻辑回归 前言 手写AI推出的全新面向AI算法的C课程 Algo C&…

InnoDB中必须要了解的几个关键特性

InnoDB引擎在设计中使用了很多技术思想。下面我们主要介绍一些InnoDB的关键特性,帮助你去更好了解 InnoDB。 关键特性 1.预读(1)预读的两种算法(2)在InnoDB中相关配置 2.插入缓冲2.1 Insert Buffer2.2 Change Buffer2…

跨域的五种最常见解决方案

这是一篇笔记 什么是跨域? 跨域不是问题,是一种安全机制。浏览器有一种策略名为同源策略,同源策略规定了部分请求不能被浏览器所接受。 值得一提的是:同源策略导致的跨域是浏览器单方面拒绝响应数据,服务器端是处理…

C#基于asp.net的企业人事管理系统的研究与实现

(一)任务 1.本课题的任务是对人事管理系统的管理过程进行分析,列出逻辑实现过程,对系统进行逻辑设计和数据库设计; 2.主要实现系统管理、档案管理、考勤管理、薪水管理等功能; 3.实现企业员工的相关信息&am…

一篇文章教你解决node-sass 4.12.0 安装失败,一劳永逸

已知: 使用mac电脑使用的node版本是v14.20.0 问题:在安装node-sass 4.12.0的时候报错如下 看到这一堆错误,千万不要立马复制粘贴到浏览器去搜,感觉像无头苍蝇乱撞,好歹稍微看一下什么意思。 显而易见是有一个文档40…