Java容器深入浅出之String、StringBuffer、StringBuilder
对字符串的花式处理一直是现代应用系统的主要操作之一,也是对Java基础知识考察的重要方面。事实上,Java字符串类的底层是通过数组来实现的。具体来说,String类是固定长度的数组,StringBuffer和StringBuilder则是可变长度的,其底层是通过Arrays.copyOf的方法,复制了另外的一个数组,实现了一个内部扩容机制,从而实现一种“伪可变”。
Java字符串要点
1. String类是不可变类,一旦创建,包含在String对象中的字符数组是不可变的,直至该对象被回收。但是正如数组一样,可以更改对象的引用,指向另一个String对象。
2. StringBuffer在使用上呈现出一个可变的字符数组的对象,因此有增删查改的方法。该类通过synchronized同步方法实现线程安全。
3. StringBuilder的构造方法和API与StringBuffer类似,不过是线程不安全的,因此性能较高。
String类构造方法和方法说明
package org.leo.demo.arrays; import java.io.UnsupportedEncodingException;
//因为String类的不可变性,因此所有的连接、截取操作,都不改变原字符串的值。
public class TestString { public static void main(String[] args) throws UnsupportedEncodingException {
//字符串初始化
String s1 = "Hello World!";
System.out.println(s1);
//通过byte[]和码表来构造字符串
byte[] b = {21, 97, 12, 100};
String s3 = new String(b, "utf-8");//有UnsupportedEncodingException异常抛出
System.out.println(s3); //返回字符串长度
String s2 = new String("aeiou");
System.out.println(s2.replace('a', '$'));
System.out.println("s2.length()" + s2.length());
//通过索引查找字符
System.out.println("s2.charAt(2):" + s2.charAt(2));
//查找索引
System.out.println("s2.indexOf('o')" + s2.indexOf('o'));
System.out.println("s2.indexOf(\"io\")" + s2.indexOf("io"));
//查找前缀/后缀
System.out.println("s2.endsWith(\"ih\")"+s2.endsWith("ih"));
System.out.println("s2.startsWith(\"ae\")" + s2.startsWith("ae"));
//字符串的比较
String s21 = new String("aeiouwww");
String s22 = new String("aewou");
System.out.println("s2.compareTo(s21):"+s2.compareTo(s21));
System.out.println("s2.compareTo(s22):"+s2.compareTo(s22));
StringBuffer sb1 = new StringBuffer("aeiousss");
System.out.println("s2.contentEquals(sb1):"+s2.contentEquals(sb1));
System.out.println("s2.equals(s22)"+s2.equals(s22));
//连接
System.out.println(s1.concat(s2));//相当于"+"
char[] c = new char[] {'a','e','i','h','h','j'};
String s4 = String.copyValueOf(c, 1, 3);
System.out.println(s4);
//数组化
byte[] b1 = s4.getBytes();
System.out.println(b1.toString());
s4.getChars(1, 2, c, 2);
System.out.println(c.toString());
System.out.println(s4.toCharArray()); for(byte cc:b1) {
System.out.print(cc + " ");
}
} }
StringBuilder常用方法说明
package org.leo.demo.string;
public class TestStringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
System.out.println(sb.hashCode());
//增(追加)
sb.append("Java");
//增(插入)
sb.insert(0, "Hello ");
//改
sb.replace(5, 6, ",");
//删
sb.delete(5, 6);
System.out.println(sb);
//查
char c = sb.charAt(5);
System.out.println(c);
//反转
sb.reverse();
System.out.println(sb);
//长度及容量
System.out.println("sb.length():" + sb.length());
System.out.println("sb.capacity():" + sb.capacity());
//取子串
String string = sb.substring(2, 6);
System.out.println(string);
//改变长度,将保留前n的StringBuilder对象
sb.setLength(4);
System.out.println(sb);
System.out.println(sb.hashCode());
}
}
Java容器深入浅出之String、StringBuffer、StringBuilder的更多相关文章
- [改善Java代码]正确使用String,StringBuffer,StringBuilder
CharSequence接口有三个实现类与字符串有关:String,StringBuffer,StringBuffer.虽然它们都与字符串有关,但是其处理机制是不同的. String类是不可改变的量, ...
- Java学习笔记--String StringBuffer StringBuilder
String StringBuffer StringBuilder String http://docs.oracle.com/javase/7/docs/api/ 中文: http://www.cn ...
- 【Java基础】String StringBuffer StringBuilder
String String是不可变的 我们都知道String不是基本数据类型,而是一个对象,并且是final类型的,不可变的.(public final class String) 查看以下代码: S ...
- 浅谈 Java 字符串(String, StringBuffer, StringBuilder)
我们先要记住三者的特征: String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量(非线程安全) 一.定义 查看 API 会发现,String ...
- 重温java中的String,StringBuffer,StringBuilder类
不论什么一个系统在开发的过程中, 相信都不会缺少对字符串的处理. 在 java 语言中, 用来处理字符串的的类经常使用的有 3 个: String.StringBuffer.StringBuilder ...
- java中 String StringBuffer StringBuilder的区别
* String类是不可变类,只要对String进行修改,都会导致新的对象生成. * StringBuffer和StringBuilder都是可变类,任何对字符串的改变都不会产生新的对象. 在实际使用 ...
- String,StringBuffer,StringBuilder的区别
public static void main(String[] args) { String str = new String("hello...."); StringBuffe ...
- 关于String StringBuffer StringBuilder
0. String对象的创建 1.关于类对象的创建,很普通的一种方式就是利用构造器,String类也不例外:String s=new String("Hello world&qu ...
- [置顶] String StringBuffer StringBuilder的区别剖析
这是一道很常见的面试题目,至少我遇到过String/StringBuffer/StringBuilder的区别:String是不可变的对象(final)类型,每一次对String对象的更改均是生成一个 ...
随机推荐
- Flex copy and paste
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx ...
- Nginx入门篇(二)之Nginx部署与配置文件解析
一.Nginx编译安装 ()查看系统环境 [root@localhost tools]# cat /etc/redhat-release CentOS Linux release (Core) [ro ...
- MAVEN相关文章
Maven入门指南① :Maven 快速入门及简单使用 Maven入门指南② :Maven 常用命令,手动创建第一个 Maven 项目 Maven入门指南③:坐标和依赖 Maven入门指南④:仓库 M ...
- Maven学习(十三)-----Maven 构建生命周期
Maven 构建生命周期 构建生命周期是什么? 构建生命周期阶段的目标是执行顺序是一个良好定义的序列. 这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段: 阶段 处理 描述 准 ...
- VIN码识别/车架号识别独家支持云识别
VIN码(车架号)对于懂车的人来说并不陌生,不要小看这一串字符,从VIN码中可以读懂车辆的生产厂家.年代.车型.车身型式及代码.发动机代码及组装地点等信息. 一辆汽车的VIN码也是车辆的唯一身份证明, ...
- 180725-InfluxDB-v1.6.0安装和简单使用小结
InfluxDB安装和简单使用小结 InfluxDB是一个时序性数据库,因为工作需求,安装后使用测试下是否支持大数据下的业务场景 说明: 安装最新版本 v1.6.0 集群版本要收费,单机版本免费 内部 ...
- Jmeter接口测试(三)接口测试实践
Jmeter 脚本编写一般分五个步骤: 1. 添加线程组 2. 添加 http 请求 3. 在 http 请求中写入接入 url.路径.请求方式和参数 4. 添加查看结果树 5. 调用接口.查看返回值 ...
- Python接口测试实战5(下) - RESTful、Web Service及Mock Server
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- 学习笔记之ubuntu修改固定IP脚本
一.shell脚本编程 二.正则表达式 三.linux修改IP的方法 #!/bin/bash cd /etc/network/ stty erase '^?' write_interfaces() { ...
- 在django中使用django_debug_toolbar
一.概述 django_debug_toolbar 是django的第三方工具包,给django扩展了调试功能. 包括查看执行的sql语句,db查询次数,request,headers,调试概览等. ...