Java基础理论之字符串处理类String,StringBuffer,StringBuilder,正则

本文详细介绍了Java中的String、StringBuffer和StringBuilder类,包括它们的特性、构造方法、接口方法以及在字符串处理中的优缺点。特别强调了String的不可变性,StringBuffer的线程安全和StringBuilder的高效性。同时,文章还涵盖了正则表达式的使用。

此篇文章包括String,StringBuffer,StringBuilder的使用,其中各自的有缺点比较,在开发中会比较实用在最下面,各位看官耐心查看。

String

简介

String类包括用于检查序列的各个字符的方法,用于比较字符串,搜索字符串,提取子字符串以及创建将所有字符翻译为大写或小写的字符串的副本。 案例映射基于Character类指定的Unicode标准版本。

Java语言为字符串连接运算符(+)提供特殊支持,并为其他对象转换为字符串。 字符串连接是通过StringBuilder (或StringBuffer )类及其append方法实现的。 字符串转换是通过方法来实现toString ,由下式定义Object和继承由在Java中的所有类。 有关字符串连接和转换的其他信息,请参阅Gosling,Joy和Steele, Java语言规范 。

除非另有说明,否则传递null参数到此类中的构造函数或方法将导致抛出NullPointerException 。

A String表示UTF-16格式的字符串,其中补充字符由代理对表示 (有关详细信息,请参阅Character课程中的Character部分)。 索引值是指char代码单元,所以补充字符在String中使用两个String 。

String类提供处理Unicode代码点(即字符)的方法,以及用于处理Unicode代码单元(即char值)的方法。

特点

  1. 字符串不变:字符串的值在创建后不能被更改。 放在堆内存。
  2. 因为String对象是不可变的,所以它们可以被共享。
  3. “abc” 等效于 char[] data={ ‘a’ , ‘b’ , ‘c’ } 。

因为继承了object类 所以打印时展示的是内容 不是地址值

Java存在常量优化机制,在编译的时候,会将a+b+c 拼接为abc

特殊案例:

 	String a = "123";
    String b = "12";
    String c = b+"3";
    String d = "12"+"3";
    System.out.println(a == c);
    System.out.println(a == d);
    System.out.println(a == c.intern());
    System.out.println(a.equals(c));

打印结果:
false
true
true
true

所属包

Class String
java.lang.Object 
java.lang.String 

public final class String extends Object implements Serializable, Comparable<String>, CharSequence

构造方法

⭐
public String() :初始化新创建的 String对象,以使其表示空字符序列。
⭐⭐
public String(char[] value) :通过当前参数中的字符数组来构造新的String。
public String(byte[] bytes) :通过使用平台的默认字符集解码当前参数中的字节数组来构造新的
String。
String(byte[] bytes, int offset, int length, Charset charset) 
构一个新的String通过使用指定的指定字节子阵列解码charset 。
Charset 描述 :
US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set 
ISO-8859-1   ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1 
UTF-8 Eight-bit UCS Transformation Format 
UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order 
UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order 
UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark 


String(byte[] bytes, int offset, int length, String charsetName) 
构造一个新的 String通过使用指定的字符集解码指定的字节子阵列。 
String(int[] codePoints, int offset, int count) 分配一个新的 String ,其中包含 Unicode code point数组参数的子阵列中的 字符 。
⭐⭐
String(StringBuffer buffer) 分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。
⭐⭐  
String(StringBuilder builder) 分配一个新的字符串,其中包含当前包含在字符串构建器参数中的字符序列。 

静态方法

⭐⭐⭐
static String valueOf(参数) 基本数据类型,char[]都可以返回 参数内容的字符串。 

接口方法


⭐⭐
int length() 返回此字符串的长度 
⭐
char charAt(int index) 返回 char指定索引处的值。  
 
int compareTo(String anotherString) 按字典顺序比较两个字符串。

int compareToIgnoreCase(String str) 字典顺序比较两个字符串,忽略大小写
⭐⭐
boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列时才返回true。  
⭐
byte[] getBytes() 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。 多用于字节流 例如换行"\r\n".getBytes();

byte[] getBytes(Charset charset) 使用给定的charset将该String编码为字节序列,将结果存储到新的字节数组中  指定编码方式

Charset 描述 :
US-ASCII Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set 
ISO-8859-1   ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1 
UTF-8 Eight-bit UCS Transformation Format 
UTF-16BE Sixteen-bit UCS Transformation Format, big-endian byte order 
UTF-16LE Sixteen-bit UCS Transformation Format, little-endian byte order 
UTF-16 Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark 


⭐⭐⭐
boolean equals(Object anObject) 将此字符串与指定对象进行比较。  
⭐⭐⭐
boolean equalsIgnoreCase(String anotherString) 将此 String与其他 String比较,忽略大小写。
⭐
int indexOf(int ch) 返回指定字符第一次出现的字符串内的索引。  
 ⭐⭐
boolean isEmpty() 返回 true如果,且仅当 length()为 0 。  
⭐
int lastIndexOf(int ch) 返回指定字符的最后一次出现的字符串中的索引。 
⭐⭐
int length() 返回此字符串的长度。  
⭐⭐⭐
String replace(char oldChar, char newChar) 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。  

⭐⭐⭐
String replaceAll(String regex, String replacement) 用给定的替换替换与给定的 regular expression匹配的此字符串的每个子字符串。 
⭐⭐⭐
String[] split(String regex) 将此字符串分割为给定的 regular expression的匹配。
⭐⭐⭐
String substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。
⭐⭐
char[] toCharArray() 将此字符串转换为新的字符数组。 

⭐⭐
String toLowerCase() 将所有在此字符 String使用默认语言环境的规则,转小写。 
⭐⭐
String toUpperCase() 将所有在此字符 String使用默认语言环境的规则大写。  
⭐⭐
String trim() 返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。  

StringBuffer

简介

线程安全,可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。 在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。
字符串缓冲区可以安全地被多个线程使用。 这些方法在必要时进行同步,以便任何特定实例上的所有操作都按照与所涉及的各个线程所执行的方法调用顺序一致的顺序发生。

StringBuffer的主要StringBuffer是append和insert方法,它们被重载以便接受任何类型的数据。 每个都有效地将给定的数据转换为字符串,然后将该字符串的字符附加或插入到字符串缓冲区。 append方法总是在缓冲区的末尾添加这些字符; insert方法将insert添加到指定点。

所属包

java.lang 
Class StringBuffer
java.lang.Object 
java.lang.StringBuffer 
public final class StringBuffer extends Object implements Serializable, CharSequence

构造方法

⭐⭐⭐
StringBuffer() 构造一个没有字符的字符串缓冲区,初始容量为16个字符。 
 
StringBuffer(CharSequence seq) 构造一个包含与指定的相同字符的字符串缓冲区 CharSequence 。  

StringBuffer(int capacity) 构造一个没有字符的字符串缓冲区和指定的初始容量。  
⭐⭐
StringBuffer(String str) 构造一个初始化为指定字符串内容的字符串缓冲区。  

接口方法

⭐⭐⭐
StringBuffer append(参数) 参数可为基本数据类型和char[]
⭐⭐
StringBuffer delete(int start, int end) | deleteCharAt(int index) 删除此序列的子字符串中的字符。  
⭐⭐
StringBuffer reverse() 导致该字符序列被序列的相反代替。  
⭐⭐⭐
String toString() 返回表示此顺序中的数据的字符串。 

void trimToSize() 尝试减少用于字符序列的存储 

⭐⭐
int length() 返回长度(字符数)。 

int capacity() 返回当前容量。  
⭐
char charAt(int index) 返回 char在指定索引在这个序列值。  
⭐
int indexOf(String str) 返回指定子字符串第一次出现的字符串内的索引。  

StringBuffer insert(int offset, 基本数据类型+char[] b) 
在此序列中插入 参数的字符串表示形式。  
⭐
int lastIndexOf(String str) 返回指定子字符串最右边出现的字符串内的索引。
⭐
void setCharAt(int index, char ch) 指定索引处的字符设置为 ch 。 

⭐
String substring(int start) 返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。    
  

StringBulid

简介

查阅java.lang.StringBuilder的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。

它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。(默认16字符空间,超过自动扩充)

所属包

java.lang 
Class StringBuilder
java.lang.Object 
java.lang.StringBuilder 


public final class StringBuilder extends Object implements Serializable, CharSequence

构造方法

⭐⭐⭐
StringBuilder() 构造一个没有字符的字符串构建器,初始容量为16个字符。  
StringBuilder(CharSequence seq) 构造一个包含与指定的相同字符的字符串构建器 CharSequence 。  
StringBuilder(int capacity) 构造一个没有字符的字符串构建器,由 capacity参数指定的初始容量。
⭐⭐⭐  
StringBuilder(String str) 构造一个初始化为指定字符串内容的字符串构建器。  


接口方法

⭐⭐⭐
StringBuffer append(参数) 参数可为基本数据类型和char[]
⭐⭐
StringBuffer delete(int start, int end) | deleteCharAt(int index) 删除此序列的子字符串中的字符。  
⭐⭐
StringBuffer reverse() 导致该字符序列被序列的相反代替。  
⭐⭐⭐
String toString() 返回表示此顺序中的数据的字符串。 

void trimToSize() 尝试减少用于字符序列的存储 

⭐⭐
int length() 返回长度(字符数)。 

int capacity() 返回当前容量。  
⭐
char charAt(int index) 返回 char在指定索引在这个序列值。  
⭐
int indexOf(String str) 返回指定子字符串第一次出现的字符串内的索引。  

StringBuffer insert(int offset, 基本数据类型+char[] b) 
在此序列中插入 参数的字符串表示形式。  
⭐
int lastIndexOf(String str) 返回指定子字符串最右边出现的字符串内的索引。
⭐
void setCharAt(int index, char ch) 指定索引处的字符设置为 ch 。 

⭐
String substring(int start) 返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。    
   

String StringBuffer StringBuilder 的区别和使用

String的缺点

过程是需要重新在栈堆内存中开辟内存空间的,拼接字符串也相应的需要开辟内存空间,这样短短的两个字符串,却需要开辟三次内存空间,不得不说这是对内存空间的极大浪费

StringBuffer 和StirngBulider的特点

当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。

和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。

StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。

由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

三者的区别:

(1)字符修改上的区别(主要)

String:不可变字符串;

StringBuffer:可变字符串、效率低、线程安全;

StringBuilder:可变字符序列、效率高、线程不安全;

(2)初始化上的区别,String可以空赋值,后者不行,报错

三者使用

(1)如果要操作少量的数据用 String;

(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;

(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder(推荐使用)。

内存:

String

String+String

StringBuffer / StringBuilder 内存图

 正则

Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); booleanb = m.matches(); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值