Java:类库(StringBuffer,Runtime,Date,正则,Timer)

 1,StringBuffer类

String的内容一旦声明则不可改变,如果改变,则改变的肯定是String的引用地址,如果现在要一个字符串经常改变,此时就必须使用StringBuffer类。

String:https://shao12138.blog.csdn.net/article/details/110419283#t9

1.1,String&StringBuffer&StringBuilder

String 字符串常量、StringBuffer 字符串变量(线程安全)、StringBuilder 字符串变量(非线程安全)

  • String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变 的,直至这个对象被销毁。
  • StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过 StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字 符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法 将其转换为一个String对象。
  • java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。StringBuffer、StringBuilder都代表可变的字符串对象,它们有共同的父类 AbstractStringBuilder ,并且两个类的构造方法和成员方法也基本相同。不同的是,StringBuffer 是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder性能略高。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同(是否添加了synchronize)。

在 Java 中,final 修饰的变量表示该变量的值不能被修改,但是如果 final 修饰的是对象引用,那么该对象的内容是可以被修改的。

1.2,StringBuffer基本方法

方法定义 类型 描述
public StringBuffer() 构造 StringBuffer的构造方法
public StringBuffer append(char c) 方法 在StringBuffer中提供了大量的追加操作(类似于String中的+操作)可以向StringBuffer中追加内容,此方法可以添加任何数据类型。
public StringBuffer append(String str)
public StringBuffer append(StringBuffer sb)
public int indexOf(String str) 方法 查找指定字符串是否存在
public int indexOf(String str,int fromIndex) 方法 在指定位置处加上指定字符类型。
public StringBuffer insert(int offset,String str) 方法 在指定位置处加上指定字符类型。
public StringBuffer reverse() 方法 将内容反转保存
public StringBuffer replace(int start,int end,String str) 方法 指定内容替换
public int length() 方法 求出内容长度
public StringBuffer delete(int start,int end) 方法 删除指定范围的字符串
public String substring(int start) 方法 字符串截取,指定开始点
public String subString(int start,int end) 方法 截取指定范围的字符串
public String toString() 方法 Object类继承的方法,用于将内容变为String类型

1, 字符串连接操作

StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("1,");stringBuffer.append("2");
System.out.println(stringBuffer);
================================================
1,2
public class HelloWord {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("1,");stringBuffer.append("2");
        System.out.println(stringBuffer);
        update(stringBuffer);
        System.out.println(stringBuffer);
    }
    public static void update(StringBuffer stringBuffer){
        stringBuffer.append("-ysy");
    }
}
=================================================
1,2
1,2-ysy

从程序运行结果来看,将StringBuffer对象的内容传递到了fun()方法后,对StringBuffer的内容进行修改,而且操作完毕后修改的内容将被保留下来,所以与String比较StringBuffer的内容是可以修改的。

2,在任意位置处为StringBuffer添加内容

public class HelloWord {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("JAVA");
        buffer.insert(0,"Hello ");
        System.out.println(buffer);
    }
}
==================================
Hello JAVA

3,字符串反转操作

public static void main(String[] args) {
    StringBuffer buffer = new StringBuffer();
    buffer.append("JAVA");
    buffer.reverse().toString();
    System.out.println(buffer);
}
=========================================
AVAJ

4,替换指定范围的内容

public static void main(String[] args) {
     StringBuffer buffer = new StringBuffer();
     buffer.append("Hello ");buffer.append("World!!");
     buffer.replace(6,11,"JAVA");
     System.out.println(buffer);
}
================================
Hello JAVA!!

5,字符串截取

public class HelloWord {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("Hello ");buffer.append("World!!");
        String str=buffer.substring(6,11);
        System.out.println(str);
    }
}
=============================================
World

6,删除指定范围的字符串

public class HelloWord {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("Hello ");buffer.append("World!!");
        buffer.delete(6,14);
        System.out.println(buffer);
    }
}
==========================================
Hello

7,查找内容是否存在

public class HelloWord {
    public static void main(String[] args) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("Hello ");buffer.append("World!!");
        if(buffer.indexOf("Hello")==-1){
            System.out.println("没有找到指定的内容!");
        }else{
            System.out.println("可以查找到指定的内容!");
        }
    }
}
==================================
可以查找到指定的内容!

1.3,字符串拼接

拼接字符串有很多种方式,其中最常用的有4种:

  • + 运算符:如果拼接的都是字符串直接量,则适合使用 “+” 运算符实现拼接;

如果拼接的都是字符串直接量,则在编译时编译器会将其直接优化为一个完整的字符串,和你直接写一个完整的字符串是一样的,所以效率非常的高。案例:https://shao12138.blog.csdn.net/article/details/110419283#t11) 如果拼接的字符串中包含变量,则在编译时编译器采用StringBuilder对其进行优化,即自动创建 StringBuilder实例并调用其append()方法,将这些字符串拼接在一起,效率也很高。但如果这个拼接操作是在循环中进行的,那么每次循环编译器都会创建一个StringBuilder实例,再去拼接字符串,相当于执行了 new StringBuilder().append(str) ,所以此时效率很低。

  • StringBuilder:如果拼接的字符串中包含变量,并不要求线程安全,则适合使用StringBuilder;
  • StringBuffer:如果拼接的字符串中包含变量,并且要求线程安全,则适合使用StringBuffer;

StringBuilder/StringBuffer都有字符串缓冲区,缓冲区的容量在创建对象时确定,并且默认为 16。当拼接的字符串超过缓冲区的容量时,会触发缓冲区的扩容机制,即缓冲区加倍。缓冲区频繁的扩容会降低拼接的性能,所以如果能提前预估最终字符串的长度,则建议在创建可变 字符串对象时,放弃使用默认的容量,可以指定缓冲区的容量为预估的字符串的长度。

  • String类的concat方法:如果只是对两个字符串进行拼接,并且包含变量,则适合使用concat方法;

concat方法的拼接逻辑是,先创建一个足以容纳待拼接的两个字符串的字节数组,然后先后将两 个字符串拼到这个数组里,最后将此数组转换为字符串。 在拼接大量字符串的时候,concat方法的效率低于StringBuilder。但是只拼接2个字符串时, concat方法的效率要优于StringBuilder。并且这种拼接方式代码简洁,所以只拼2个字符串时建议 优先选择concat方法。

2,Runtime类

2.1,认识Runtimel类

在Java中Runtime类表示运行时操作类,是一个封装了JVM进程的类,每一个JVM都对应着一个Runtime类的实例,此实例由JVM运行时为其实例化。所以在JDK文档中读者不会发现任何有关Runtime类中的构造方法的定义,这是因为Runtime类本身的构造方法是私有化的&#x

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值