码迷,mamicode.com
首页 > 编程语言 > 详细

Java核心API -- 2(String、StringBuilder、StringBuffer)

时间:2015-05-30 18:24:46      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:字符串   string   stringbuilder   stringbuffer   

 

1. String字符串

    1)String类型介绍

        String类采用final修饰,String对象为不可变对象,一旦在内存中创建,内容不能发生变化,若要对字符串内容改变,那么就会创建新对象。

        String对象创建,有静态和动态之分。

        String str1 = "dadsadad";

        String str2 = new String("dasdasdadad");

    2)String常量池

        JVM对字符串有一个限制,让字符串作为不变对象,这样就可以做到重用。事实上,当我们通过字面量,常量来初始化一个字符串时,JVM首先会从字符串的常量池(一个JVM内部维护的内存区域,用来保存已经创建过的字符串对象)中查询用来保存该字符串的对象是否存在,若存在则直接引用,若不存在则创建该字符串对象并存入常量池,然后引用它。

    3)字符串的常用方法

        String str = "dn1aAj2FD6hbF4hjaX0f";

        ① str.length(),获取字符串的长度,返回int类型的数值

        ② str.indexOf(char c),获取字符串中某个字符第一次出现的索引,找不到,返回值为-1。    

            str.lastIndexOf(char c), 返回指定字符在此字符串中最后一次出现的索引,找不到,返回值为-1

        ③ str.charAt(int index),获取字符串指定下标位置上的字符,返回值是char类型的。

        ④ str.toUpperCase(),将字符串str全部转成大写,

            str.toLowerCase(),将字符串str全部转成小写,返回的都是新的字符串。

        ⑤ str.stratsWith(String s),判断字符串str是不是以字符串s开头,

            str.endsWith(String s),判断字符串str是不是以s结尾,返回值都是boolean类型的。

        ⑥ str.equals(String s),判断两个字符串的内容是否相等(在前一章已经分析了==和equals()的区别了),返回boolean类型。

        ⑦ str.replace(char oldChar, char newChar):将字符串中匹配odChar的字符全部替换成新的newChar字符,返回新的字符串。

        ⑧ str.subString(int begin),截取字符串中某一段字符,从下标begin开始,截取到最后, 

            str.subString(int begin, int end),截取字符串中某一段字符,从下标begin开始,到end-1结束,返回的是一个新的字符串。

        ⑨  str.split(String regex): 参数regex为一个字符串规则,以regex所表示的字符串为分隔符,将字符串拆分成字符串数组。

            其中,regex所表示的字符串不被保留,即 不会存到字符串数组中,可理解为被一刀切,消失!

        ⑩ str.trim(),去掉字符串前后两端的空格,返回新的字符串。


    案例1:

        技术分享

    结果:

        技术分享



2. StringBuilder、StringBuffer类

    String类我们已经得知,它是不变对象,那么每当对内容修改时都会引发新对象的创建。那么当我们有一个需求是需要频繁修改字符串时,这样不仅不能减少内存的开销,返回会增加内存的开销。为此java为我们提供了一个专门用于修改字符串内容的类StringBuilder类, 该类封装了可变的字符串,换句话说,当我们需要改变字符串内容时,并不会创建新对象,而是在原对象基础上进行修改。从而减小了内存的开销。

    StringBuilder类的常用方法有:

        append(String str):追加字符串;

        insert (int index,String s):从指定下标位置插入字符串;

        delete(int start,int end):从起始下标删除字符串到end结束下标,end要大于等于start,可以超出数组总长度;

        replace(int start,int end,String str): 替换字符串;

        reverse():字符串反转。


    案例2:

        技术分享

    结果:可以看出效率方面对比性很强。

        技术分享


    案例3:

        技术分享

    结果:

        技术分享


    StringBuffer类,是JDK早期的版本,StringBuffer是线程安全的可变字符序列。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。

    通常,如果 sb 引用 StringBuilder 的一个实例,则 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。只要发生有关源序列(如在源序列中追加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。

    从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。 java.lang.StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。


 

本文出自 “永远年轻” 博客,请务必保留此出处http://kingkongzhao.blog.51cto.com/6319491/1656611

Java核心API -- 2(String、StringBuilder、StringBuffer)

标签:字符串   string   stringbuilder   stringbuffer   

原文地址:http://kingkongzhao.blog.51cto.com/6319491/1656611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!