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对象的更改均是生成一个 ...
随机推荐
- HDFS要点
namenode存储的数据: 主控服务器主要有三类数据:文件系统的目录结构数据,各个文件的分块信息,数据块的位置信息(就数据块放置在哪些数据服务器上...).在GFS和HDFS的架构中,只有文件的目录 ...
- 面试:sql语句-1-基础查询
1.基础查询
- equals和==方法比较(二)--Long中equals源码分析
接上篇,分析equals方法在Long包装类中的重写,其他类及我们自定义的类,同样可以根据需要重新equals方法. equals方法定义 equals方法是Object类中的方法,java中所有的对 ...
- OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成
首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <Android学习笔记--O ...
- Qt 将字符串转成16进制显示
最近项目用到了需要将字符串转换成16进制显示.这玩意折腾了一上午. 首先,数据块内容 struct UserData { char Head[3] = {'X','J','J'}; char Flag ...
- vue关于img src动态赋值问题
解决方法: 加个require()就可以了 <img :src="require('../assets/images/'+imgsrc+'.png')"/>
- QSS 样式示例:QTreeWidget, QComboBox,QSlider,QSpinBox
目录 Image 填充整个控件的区域 QTreeWidget QSpinbox 的上翻下翻按钮和箭头 QComboBox 的设置,大坑 QSlider 最近需要对一个软件加上Qt界面和 的样式,第一次 ...
- 131. 分割回文串 javascript实现
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入: "aab" 输出: [ ["aa",&quo ...
- eBay推Winit海外仓 鼓励卖家拓展北美市场
[亿邦动力网讯]2月11日消息,日前,跨境电商平台eBay与外贸电商服务商万邑通(Winit)合作,针对平台卖家推出了Winit美国海外仓,鼓励卖家拓展北美市场. 亿邦动力网获悉,Winit美国海外仓 ...
- 使用Scrapy构建一个网络爬虫
记得n年前项目需要一个灵活的爬虫工具,就组织了一个小团队用Java实现了一个爬虫框架,可以根据目标网站的结构.地址和需要的内容,做简单的配置开发,即可实现特定网站的爬虫功能.因为要考虑到各种特殊情形, ...