案例讲解--自定义一个StringBuilder的类

一:案例设计介绍

自义一个M定yStringBuilder来实现StringBuilder的功能

二:案例设计

  1. 实现append()方法追加字符串的功能
  2. 实现length()方法统计字符串的功能
  3. 实现capacity()方法获取容量大小
  4. 实现toString()方法,完成字符串的输出

三:方案实施

class MyStringBuilder{
构造方法{
//做初始化
}
//常用的方法
public int append();
public int length();
public capacity();
public toString();
}

四:具体实施步骤

public class StringBuilder{
public static void main(String []args){
MyStringBuilder msb=new MyStringBuilder();
msb.append("abc").append("world").append("hello");
//msb.append("world");
System.out.println("字符个数:"+msb.length());
System.out.println("容量大小:"+msb.capacity());
System.out.println("输出字符串:"+msb.toString());
}
}
class MyStringBuilder{
private char [] value; //字符数组
private int count=0; //字符数组中存放字符的个数
public MyStringBuilder(){
value=new char[16];
}
public MyStringBuilder(int capacity){
value=new char[capacity];
}
public MyStringBuilder(String str){
value=new char[str.length()+16];
}
//得到字符数组中的字符个数
public int length(){
return count;
}
//返回容器容量大小
public int capacity(){
return value.length;
}
//实现字符串的追加(添加)
public MyStringBuilder append(String str){
int len=str.length; //获取要添加字符串的长度
//确保所添加的字符串能放到字符数组中
ensureCapacity(count+len);
//把要添加的字符串追加到新的指定数组的指定位置后面
str.getChars(0,len,value,count);
count+=len; //元素的个数增加了
return this;
}
public void ensureCapacity(int capacity){
//数组超出容量的大小
if(capacity-value.length>0){
int newCapacity=value.length*2+2; //扩容后新字符数组的大小
value=Arrays.copyOf(value,newCapacity);
}
}
//把字符串数组的字符转换为字符串显示
public String toString(){
return new String(value,0,count);
}
}

Java高级特性--自定义一个StringBuilder的类的更多相关文章

  1. Java高级特性-String、StringBuffer和StringBuilder

    Java高级特性-String.StringBuffer和StringBuilder String Java语言中的字符串值都属于String类,虽然有其他方法表示字符串(如字符串数组),但Java一 ...

  2. paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型

    paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...

  3. java高级特性增强

    第4天 java高级特性增强 今天内容安排: 1.掌握多线程 2.掌握并发包下的队列 3.了解JMS 4.掌握JVM技术 5.掌握反射和动态代理 java多线程增强 .1. java多线程基本知识 . ...

  4. Java高级特性——反射机制(第二篇)

    在Java高级特性——反射机制(第一篇)中,写了很多反射的实例,可能对于Class的了解还是有点迷糊,那么我们试着从内存角度去分析一下. Java内存 从上图可以看出,Java将内存分为堆.栈.方法区 ...

  5. Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例

    利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...

  6. Java高级特性1_流库_初体验

    Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...

  7. 云端卫士实战录 | Java高级特性之多线程

    <实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...

  8. Python的高级特性8:你真的了解类,对象,实例,方法吗

    Python的高级特性1-7系列是本人从Python2过渡3时写下的一些个人见解(不敢说一定对),接下来的系列主要会以类级为主. 类,对象,实例,方法是几个面向对象的几个基本概念,其实我觉得很多人并不 ...

  9. Java高级特性 第2节 java中常用的实用类(1)

    一.Java API Java API即Java应用程序编程接口,他是运行库的集合,预先定义了一些接口和类,程序员可以直接调用:此外也特指API的说明文档,也称帮助文档. Java中常用的包: jav ...

随机推荐

  1. sql父子表结构,常用脚本

    在实际运用中经常会创建这样的结构表Category(Id, ParentId, Name),特别是用于树形结构时(菜单树,权限树..),这种表设计自然而然地会用到递归,若是在程序中进行递归(虽然在程序 ...

  2. java集合遍历的几种方式总结及比较

    集合类的通用遍历方式, 用迭代器迭代: Iterator it = list.iterator(); while(it.hasNext()) { Object obj = it.next(); }   ...

  3. hiper工具查看页面加载时间

    先需要下载 cnpm i hiper -g # 当我们省略协议头时,默认会在url前添加`https://` # 最简单的用法 hiper baidu.com # 如何url中含有任何参数,请使用双引 ...

  4. Manacher算法 (马拉车算法)

    #include<iostream> #include<string.h> #include<algorithm> using namespace std; ]; ...

  5. 输出第n个丑数

    方法一:暴力法 代码如下: 判断是否是丑数 public static boolean isUgly(int n){ while(n!=1){ if(n%2 == 0){ n /= 2; }else ...

  6. 分布式缓存技术之Redis_04Redis的应用实战

    目录 1 Redis Java客户端的使用 Jedis 单点连接 Jedis sentinel连接哨兵集群 Jedis sentinel源码分析 Jedis Cluster分片环境连接 Jedis C ...

  7. JIRA

    https://www.jianshu.com/p/8c14b52ce692 JIRA这个工具接触有好几年了,在多个海外项目上都用过这个工具.去年又在项目上深度使用后就有点爱不释手了,回国后也在找机会 ...

  8. Linux虚拟机搭建本地yum源

    Yum本地源的配置 本教程是在虚拟机里安装Red Hat Enterprise Linux 7 ,以其为例使用iso文件进行Yum本地源的配置.所使用的软件如下: (1)虚拟机:Vmware work ...

  9. BZOJ2681 : 玩游戏2

    首先若存在多个连通块,那么答案显然是$+\infty$. 否则以$m$为根,每棵子树的根节点都最多只能放一个金币,且这些子树之间互不干扰. 对于一棵父亲为$m$的子树,最优方案下一定可以将子树剖分成若 ...

  10. MUI消息推送

    一.push通过H5+实现 简单实现方式:通过轮询服务器是否有新消息推送过来 mui.plusReady(function() { plus.navigator.closeSplashscreen() ...