JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder


讲完String,我们来聊聊他的小兄弟

一.StringBuffer概述

关于StringBuffer这个对象,Buffer是什么意思?缓冲区的意思,String一旦初始化时不可以被改变的,而StringBuffer是可以的,这就是区别,特点:

  • StringBuffer是一个容器
  • 可以字节操作多个数据类型
  • 最终会通过toString方法变成字符串

  • 存储

    StringBuffer append():将指定的数据作为参数添加到已有数据的结尾处

  • 删除

    StringBuffer delete(start , end)删除缓冲区的数据,包含start,不包含end

    StringBuffer deleteCharAt(index)删除指定位置的字符

  • 获取

    char charAt(int index)

    int indexOf(String str)

    int lasrIndexOf(String str)

    String subString(int start,int end)

  • 修改

    StringBuffer replace(start,end,string)

    void setChatAt(int dex,char ch)

  • 反转

    String reverse()

  • 将缓存区的数据存储到数组中

    void getChars(int srcBegin,int srcEnd ,char[] dst,int dstBegin)

有着这样的特性,那我们逐步来讲一下

package com.lgl.hellojava;

//公共的   类   类名
public class HelloJJAVA {

    public static void main(String[] args) {

        /**
         * StringBuffer
         */
        StringBuffer sb = new StringBuffer();
        StringBuffer append = sb.append(78);
        sop(sb == append);
        sop(sb.toString());
        sop(append.toString());

    }

    /**
     * 输出
     */
    public static void sop(Object obj) {
        System.out.println(obj);
        }

    }

这算是比较常见的吧,我们没必要这么麻烦,我们可以简化

sb.append("abc").append(36);
sop(sb.toString());

我们可以直接输出字符串

这个连续的方法叫做方法调用链

因为StringBuffer的特性,我们可以在里面插入数据,我现在想在a后面插入字符串,怎么实现呢?

sb.append("abc").append(36);
sb.insert(1, "lgl");
sop(sb.toString());

没错。insert,他的两个参数,一个是下标,一个是数据,这样,我们就插入成功了

我们再来聊一下删除


    /**
     * 删除
     */
    public static void method_delete() {
        StringBuffer sb = new StringBuffer("abcdefg");

        sop(sb.toString());
        // 删除bc
        // sop(sb.delete(1, 3).toString());
        // 删除d
        sop(sb.deleteCharAt(3));
        // 清空缓冲区
        sop("all:" + sb.delete(0, sb.length()));

    }

其实这些都是比较简单的

OK,按照顺序我们现在讲获取了,其实我们在将String的时候就已经讲过了,这里就不多说了。我们说修改,修改是比较经典的,修改数据我们这样写


    /**
     * 修改
     */
    public static void method_update() {
        StringBuffer sb = new StringBuffer("abcdefg");
        // 替换一部分
        sop(sb.replace(1, 4, "java"));
        // 替换一个
        sb.setCharAt(sb.length() - 1, 'k');
        sop(sb.toString());
    }

结果

OK,修改成功,将缓冲区存储到数组中

/**
     * 将缓存区的数据存储到数组中
     */
    public static void method_getchar() {
        StringBuffer sb = new StringBuffer("abcdefg");
        char[] chs = new char[4];
        /**
         * 从1开始,4结束,存在chs里,从头1开始存
         */
        sb.getChars(1, 4, chs, 1);

        for (int i = 0; i < chs.length; i++) {
            sop("char[" + i + "] = " + chs[i] + ";");
        }
    }

输出的结果,嘿嘿

二.StringBuilder

这个在JDK1.5之后才有

  • StringBuffer:线程同步
  • StringBuilder:线程不同步

开发中不建议使用StringBuilder

我们看一下他的API说明:

用法差不多,就不多讲了,本篇闲到这里

有兴趣加群:555974449

JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder的更多相关文章

  1. c语言内存四区、数据存储范围和内存存储方向

    (1)代码区通常是共享只读(代码无法修改)的,即可以被其他的程序调用,例如运行两个qq,除了数据不一样,代码都是一样的, 每次运行qq,都会将代码和数据加载到内存中,除了数据,每次加载的代码都是一样的 ...

  2. 分布式缓存系统 Memcached 数据存储slab与hashtable

    缓存数据以item为基本单元,以双链表形式存放在对应级别大小的slabclass结构的chunk中.同时该item还存放在链式hashtable中bucket中,用于提供快速查找的索引. 首先是理解缓 ...

  3. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  4. JAVA之旅(十)——异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别

    JAVA之旅(十)--异常的概述,Try-Catch,异常声明Throws,多异常处理,自定义异常,Throw和Throws的区别 不知不觉,JAVA之旅这个系列已经更新到第十篇了,感觉如梦如幻,时间 ...

  5. 我的Java之旅 第五课 JAVA 语言语法 集合

    JAVA集合只能存放引用类型的的数据,不能存放基本数据类型,int 可以用 Integer代替. 一.集合接口  1.  Iterable<E> 实现这个接口允许对象成为 "fo ...

  6. 第十一章:Android数据存储(上)

    数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也是开发平台必须提供的基础功能.不光是在Android平台上,在其他的平台上,数据的存储永远是不可缺少的一块.Androi ...

  7. 【Android开发日记】之入门篇(七)——Android数据存储(上)

    在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...

  8. Android中的数据存储(二):文件存储 2017-05-25 08:16 35人阅读 评论(0) 收藏

    文件存储 这是本人(菜鸟)学习android数据存储时接触的有关文件存储的知识以及本人自己写的简单地demo,为初学者学习和使用文件存储提供一些帮助.. 如果有需要查看SharedPreference ...

  9. 数据存储: sqlite,coredata plist 归档

    sql 语句  结构化查询语言 通用数据库操作语言1.创建数据库create database 1407EDB2.删除数据库drop database 1407EDB3.备份use master ex ...

随机推荐

  1. Restful中 @RequestParam,@PathParam,@PathVariable等注解区别

    @RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @P ...

  2. Hibernate给表和字段设置前后缀及分隔符

    在<一口一口吃掉Hibernate(一)--使用SchemaExport生成数据表>中介绍了如何生成数据表.但是这只是最基本的.hibernate在生成或者操作数据库时,会受一些限制.比如 ...

  3. SQL执行SQL语句提示 "内存不足"(insufficient memory....)的解决方法

    由于本地执行的sql script的文件太大但是本地sql的运行内存有限,当我在MSSql的工具上运行这份178M左右的脚本的时候 它会提示 如下错误(Insufficient memory to c ...

  4. github windows pycharm 设置

    Window 上pycharm数据上传到github 在window上操作 1),安装git(百度) 进入git , bin目录执行 git-bash.exe 1)  gengyantao@DESKT ...

  5. java利用自定义类型对树形数据类型进行排序

    前言 为什么集合在存自定义类型时需要重写equals和hashCode? 1.先说List集合 List集合在存数据时是可以重复的但是 当我们需要判断一个对象是否在集合中存在时这样就有问题了! 因为我 ...

  6. bootstrap 栅格系统 HTTP协议 软件架构 B/S C/S 常见的WEB服务器

    Day32 bootstrap Bootstrap就是响应式布局最成功的实现,为了兼容不同的浏览器采用jQuery,为了适配不同的终端采用CSS3 Media Query (媒体查询) 1.1.1 栅 ...

  7. 解读Raft(二 选举和日志复制)

    Leader election Raft采用心跳机制来触发Leader选举.Leader周期性的发送心跳(如果有正常的RPC的请求情况下可以不发心跳)包保持自己Leader的角色(避免集群中其他节点认 ...

  8. String字符串的操作

    字符串的常用操作 # Author:nadech name = "my name is nadech" print(name.count("a")) print ...

  9. Spring错误之org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'bookService' is expected to be of type 'pw.fengya.tx.BookService' but was actually of type 'com.sun.proxy.$Proxy1

    org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'cas ...

  10. EntityFramework Core 自动绑定模型映射

    笔者最近在和同事共同开发项目时,需要从他们提供的包含数据库实体类型的类库中读取实体信息绑定到自己的项目中(但是都在同一个解决方案里),所以很直接的一种方式就是把项目中所有的实体都以 public Db ...