JavaAPI -------- String类

目录

概述

底层原理

创建方式

成员方法

● 判断功能

●获取功能

● 转换功能

● 替换功能

字符串缓冲类

概述

实现原理

StringBuffer

StringBuilder

String类StringBuffer类StringBuilder类区别


概述

字符串是由多个字符组成的一串数据(字符序列)的字符串常量,java中所有字符串都是String类的实例,一旦创建不可改变。

底层原理

在Java.lang包中有String类,该类有一个属性 private final char[] value,该属性用来存放字符串对象的值,比如String s = "abc" ; 在底层,实际上是以['a','b','c']存储的.并且value被final修饰,因此value值也就不可改变.

在使用过程中,我们经常会改变字符串的值,比如 s += "def",此行代码一旦运行,会再一次创建一个字符串对象,别且将原来的s对象的值拼接到一起即"abcdef"赋值给新对象,s变量指向这个新对象供我们使用的.在使用中好像s是可以改变的,但实际s已经不是原来的对象了,每一次改变都会创建新的对象,原来的对象值是不可改变的.

创建方式

  1. String s = "abc";

    这种创建方式是先在栈中创建变量s,然后在字符串常量池中查找"abc",如果找到,将s引用变量指向该"abc",如果没有找到,则在字符常量池中添加"abc",并且将s引用变量指向该"abc".

  2. String s = new String("abc);

    此方式是创建对象的一般方法,在new对象时,会调用该类的构造方法,因此会在堆中创建s对象,其值存储在堆内存中.

常用方法 构造方法 String();

此方法没有参数,创建时会创建一个空字符串,将""赋值给底层的value属性.

String(String original);

需要一个字符串参数,创建对象时会将original赋值给value属性.因为原本的original也是一个字符串,而新创建的对象和original的值相同.

String(byte[] bytes);

需要一个byte类型数组,创建对象时会将byte数组按照编码方式(默认使用"utf-8")解码,将解码后的字符串赋给新对象.

String(byte[] bytes,String charset);

也可以指定编码方式,需要多传入一个String参数,用来规定编码方式.

String(char[] value);

将char数组转换成字符串,并且赋给新对象.

成员方法

● 判断功能

boolean equals(Object obj); 使用对象调用,判断俩者内容是否一致; boolean equalsIgnoreCase(String str); 使用对象调用,判断俩者内容是否一致(忽略大小写); boolean contains(String str) 判断字符串是否包含str即判断str是否为该对象的子串,包含返回true,否则返回false; boolean isEmpty() 判断字符串是否为空,为空则返回true,否则返回false; boolean startsWith(String prefix) 判断字符串是否以prefix开头的,是返回true,否则返回false; boolean endsWith(String suffix) 判断字符串是否以prefix结尾的,是返回true,否则返回false;

●获取功能

int length() 获取字符串的长度. 因为底层使用char[]存储,因此在底层直接返回数组长度. char charAt(int index) 获取索引为index的字符. int indexOf(String str) 从前向后查找str,并且返回第一次出现的索引,如果不存在,返回-1 int indexOf(String str,int fromIndex) 从指定索引fromIndex开始从前向后查找str,并且返回第一次出现的索引,如果不存在,返回-1 int lastIndexOf(String str) 从后向前查找str,并且返回第一次出现的索引,如果不存在,返回-1.也可以理解为从前向后查找,返回最后一次出现的索引。 String substring(int start) 从索引fromIndex处截取字符串并返回。 String substring(int start,int end) 截取[start,end)区间的字符串并返回。

● 转换功能

byte[] getBytes() 将字符串转换为byte[] char[] toCharArray() 将字符串转换为char[] static String valueOf(char[] chs) 此方法为静态方法,通过类名调用.可以将char[]数组转换成String实例化对象,此方法可以传入不同类型的参数(例如byte,int)都可以转换成String对象。 String toLowerCase(); 将字符串转换成小写。 String toUpperCase(); 将字符串转换成大写。 String concat(String str); 将指定的字符串连接到该字符串的末尾。 Stirng[] split(分割符); 将字符串以特定的规则(参数传入的正则表达式)分割为若干个字符串在String[]并返回。

● 替换功能

String replace(char old,char new) 将new字符替换字符串中的old字符,返回替换后的字符。 String replace(String old,String new) 将new字符串替换字符串中的old字符串,返回替换后的字符。 replaceAll(String regex, String replacement) 参数regex: 正则表达式(一种匹配模式), replament : 需要替换的内容。 将对象中所有符合regex的内容替换为replacement。 replaceFirst(String regex, String replacement) 将对象中第一个符合regex的内容替换为replacement。

字符串缓冲类

概述

String是不可改变的,即对象一旦创建,其值不能改变,如果需要改变其值,只能创建新的对象,在我们使用过程中,我们很多时候需要改变字符串,比如拼接字符串,删除字符串,逆序等场景,我们都需要改变字符串,并且有时候我们需要在短时间多次改变,就会创建多个新对象,并且原来的对象可能我们就不再需要了,不仅浪费时间,还会造成大量的空间浪费。字符串缓冲类应运而生,可以解决时间和空间浪费。

实现原理

所有字符串的底层都是使用char[]存储字符串的每一个字符,但是String的底层char[] 被final修饰,因此String无法改变。而StringBuffer和StringBuilder的底层char数组没有被final修饰,而是有自己的扩容机制,也就是说他们使用的char[]是动态数组。

StringBuffer

实现字符串缓冲功能的一个类,是线程安全(底层的所有方法都被synchronized修饰)的,可变字符串,提供了很多字符串的处理方法,使得使用并改变字符串更加得心应手。

构造方法

public StringBuffer(); 此方法在底层调用父类AbstractStringBuilder的构造方法,并且初始化底层数组容量为16; public StringBuffer(String str); 此方法在底层调用父类AbstractStringBuilder的构造方法,并且初始化底层数组容量为16 + str.length,将str存储在char[]中;

● 添加功能

public StringBuffer append(String str)

向原字符串拼接str

public StringBuffer insert(int offset,String str)

向原字符串中索引为offset的位置插入str

● 删除功能

public StringBuffer deleteCharAt(int index)

删除索引index的字符

public StringBuffer delete(int start,int end)

删除索引区间[start,end)的字符

● 替换功能

public StringBuffer replace(int start,int end,String str)

将字符串中[start,end)的子串替换为str

● 反转功能

public StringBuffer reverse();

将字符串翻转

● 截取功能

public String substring(int start)

将字符串从start位置至结束位置截取,并以String类型返回

public String substring(int start,int end)

将字符串从start位置至end位置(不包括end)截取,并以String类型返回

StringBuilder

与StringBuffer有相同的功能,并且都是AbstractStringBuilder的子类.唯一区别是StringBuilder是线程不安全的,StringBuffer是线程安全的.

String类StringBuffer类StringBuilder类区别

● String:是字符常量,适用于少量的字符串操作的情况

● StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

● StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值