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对象的更改均是生成一个 ...
随机推荐
- sublime_text3常用配置
安装(pojie)不再赘述. 一.设置字体与编码 preferences->Settings->Settings-User,在大括号中输入如下内容: “font_size”:16.0, “ ...
- 20155213 2016-2017-2 《Java程序设计》第二周学习总结
20155213 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 关于Unicode和UTF 很抱歉,没能读完娄老师推荐的网址,关于Unicode和UTF的介 ...
- 20155223 2016-2017-2 《Java程序设计》第10周学习总结
20155223 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 Java Socket编程 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向 ...
- 搭建 ssm 环境
<!-- 引入外部jdbc配置文件 --> <context:property-placeholder location="classpath:dbconfig.prope ...
- 十、Django之Admin
一.Django Admin 管理工具 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中 ...
- google::protobuf 编译方法
这两天用了一下Protobuf 感觉很方便, 记录一下编译过程, 以做务忘(需要安装cmake): 1: 下载地址: https://developers.google.com/protocol-bu ...
- html5shiv 是一个针对 IE 浏览器的 HTML5 JavaScript 补丁,目的是让 IE 识别并支持 HTML5 元素。
html5shiv 是一个针对 IE 浏览器的 HTML5 JavaScript 补丁,目的是让 IE 识别并支持 HTML5 元素. 各版本html5shiv.js CDN网址:https://ww ...
- TW实习日记:第六天
今日的一整天都是在开发微信相关的接口,因为项目的系统是嵌在企业微信中,所以不可避免的要产生微信UserID和企业系统ID的匹配关系,那么就需要用手机号或是邮箱这种两边都存在的唯一参数进行匹配.然后再将 ...
- Elasticsearch.Net 异常:[match] query doesn't support multiple fields, found [field] and [query]
用Elasticsearch.Net检索数据,报异常: )); ElasticLowLevelClient client = new ElasticLowLevelClient(settings); ...
- centos 6.5 双网卡 上网 virtualbox nat hostonly
虚拟机两张网卡:分别调成NAT(eth0)和host only(eht1)模式. nat的网卡不用设置,host only网卡调为(vi /etc/sysconfig/network-scripts/ ...