String

Java中的字符串值属于String类,虽然有其它方法表示字符串(如字符数组),但Java一般使用String类作为字符串的标准格式,Java编译器把字符串值作为String对象;

String对象一旦创建就不能改变。如果需要进行大量的字符串修改操作,应该使用StringBuilder/StringBuffer类或者字符串数组,最终结果可以被转换成String对象;

StringBuffer:线程安全的可变字符序列;

一个类似于String的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容;

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组;

如果内存缓冲区溢出,则此容量自动增大;

StringBuilder:从JDK1.5开始,为StringBuffer类补充了一个单个线程使用的等价类,即StringBuffer;

与StringBuffer相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所有速度更快;

常用方法:

public int length()

public int capacity()

public StringBuffer append(String str)

public StringBuffer insert(int offset,String str)

public int indexOf(String str)

public int indexOf(String str,int fromIndex)

public int lastIndexOf(String str)

public StringBuffer reverse()

public String toString()

 public class StringBuilderDemo{
public static void main(String []args){
//StringBuilder sb="abc";//无此声明方式
//StringBuilder sb=new StringBuilder();//默认16个字符大小的容量
//StringBuilder sb=new StringBuilder(100);//初始化容量大小的动态字符串
//StringBuilder sb=new StringBuilder("abc"); StringBuilder sb=new StringBuilder();
sb.append("hello");
sb.append(1);
sb.append(1.5);
sb.append(true);
System.out.println(sb.length());
System.out.println(sb.capacity()); sb.insert(5,"world");
System.out.println(sb.toString());
sb.replace(5,7,"el");
System.out.println(sb.toString());
System.out.println(sb.indexOf("el"));
System.out.println(sb.reverse());
}
}

自定义一个自己的StringBuilder的类

案例介绍:自定义一个MyStringBuilder类来实现StringBuilder的功能;

案例设计:实现append方法追加字符串的功能;实现length方法统计字符的个数;实现capacity()方法获取容器大小;实现toString()方法,完成字符串的输出;

 import java.util.Arrays;
public class MyStringBuilderDemo{
public static void main(String []args){
MyStringBuilder msb=new MyStringBuilder();
msb.append("hello").append("java").append("12345678");
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;//元素的个数增加了len
return this;
} private 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);
}
}

String、StringBuffer和StringBuilder,定义一个自己的StringBuilder的类的更多相关文章

  1. 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl

    因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...

  2. 定义一个“点”(Point)类用来表示三维空间中的点(有三个坐标)。要求如下: (1)可以生成具有特定坐标的点对象。 (2)提供可以设置三个坐标的方法。 (3)提供可以计算该“点”距原点距离平方的方法。 (4)编写主类程序验证。

    package b; public interface ZuoBiao { double zuobiao(); } package b; public class Point implements Z ...

  3. 构建一个学生Student,根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

    定义一个表示学生信息的类Student,要求如下: (1)类Student的成员变量: sNO 表示学号: sName表示姓名: sSex表示性别: sAge表示年龄: sJava:表示Java课程成 ...

  4. final,finally,finalize有什么区别?String, StringBuffer, StringBuilder有什么区别?Exception和Error有什么区别?

    继上篇JVM学习之后,后面将分三期深入介绍剩余JAVA基础面试题,每期3题. 题目一.final,finally,finalize有什么区别? /*请尊重作者劳动成果,转载请标明原文链接:*/ /* ...

  5. 浅谈 Java 字符串(String, StringBuffer, StringBuilder)

    我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...

  6. 5.String StringBuffer StringBuilder

    String,StringBuffer和StringBuilder三者的讲解 对于StringBuffer和StringBuilder是对Stirng的一个优化. 之前已经说过了,String对象一旦 ...

  7. String,StringBuffer和StringBuilder三者的讲解

     对于java的学习者而言,无论是初学者,还是java大师,String对于大家而言,也绝对不会陌生.下面本人就从 自己学习的角度大致分析一下String,StringBuffer和StringBui ...

  8. Android/Java 中的 String, StringBuffer, StringBuilder的区别和使用

    Android 中的 String, StringBuffer 和 StringBuilder 是移动手机开发中经常使用到的字符串类.做为基础知识是必须要理解的,这里做一些总结. A.区别 可以从以下 ...

  9. Object,String,StringBuffer,StringBuilder,System,Runtime,Date,Math介绍及用法(API)

    1       Object对象 面向对象的核心思想:“找合适的对象,做适合的事情”. 合适的对象: 自己描述类,自己创建对象. sun已经描述了好多常用的类,可以使用这些类创建对象. API(App ...

随机推荐

  1. Ruby菜鸟入门指南

    写这篇文章的初衷源于我的伙伴们在上手Ruby过程中,表现实在是太让人拙计了.由于项目的急功近利,需要迅速入门Ruby并上手项目.所以很多开发者在实际开发过程中,不熟悉Ruby的表达方式,也会沿用其他语 ...

  2. SIGGRAPH 2017:深度学习与计算机图形学的碰撞

    每年由美国计算机协会(Association of Computing Machinery,简称ACM)计算机图形专业组举办的年会SIGGRAPH,是全球最负盛名的图形学和交互技术盛会.今年已经是这场 ...

  3. 数据库之存储过程-- 基于MySQL

    存储过程基本语法 create procedure procedure_name  [;number] [{@parameter data_type}[varying][=default][outpu ...

  4. html 获取和写入cookie的 方法

    //取Cookie的值            function getCookie(cookie_name) {     var allcookies = document.cookie;     v ...

  5. 删除Chrome地址栏记录中自动补全的网址

    为了删除某个自动补全的网站,多年的历史纪录没了,还浪费我十多分钟,蠢哭_(:з」∠)_ 不是历史记录.不是清除浏览器数据.不是myactivity(谷歌账号)中的历史纪录,直接在书签中搜索,删除,OK ...

  6. Problem C: 查找最大元素

    Problem C: 查找最大元素 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 786  Solved: 377[Submit][Status][Web ...

  7. 项目中遇到的bug

    1. babel编译转换时发生了报错: BabelLoaderError: SyntaxError: Unexpected token babel预置的转换器是 babel-preset-es2015 ...

  8. idea前后端分离搭建 JavaWeb项目

    我们小组在开发的时候, 承诺了前后端分离, 那么就要求前端和后端需要分开搭建. 不能同时放在一个工程项目中. 大致的思路是开启两个Tomcat, 一个跑前端页面, 一个跑后端程序. 1. idea打开 ...

  9. 因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。

    web.config文件中的 <system.web> 节点下加入:<webServices>    <protocols>        <add name ...

  10. linux虚拟机配置网络

    第一步.网络模式设置为桥接模式   第二步.设置ip和掩码 vim /etc/sysconfig/network-scripts/ifcfg-ens33 ens33为当前机器的网卡名称  在文件尾部添 ...