String类
我们要去了解String是一个类,而不是基本数据类型,只不过我们通常用它来表示字符串,它本身来包括一些方法,可以去输出字符串中的数据。
特点:
- String类:代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
- String是一个final类,代表不可变的字符序列。
- . 字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
- String对象的字符内容是存储在一个字符数组value[]中的。
还有关于面试中爱考的字符串常量池等内存问题,之前已经讲过了:
Java——字符串常量池
补充一点就是:只要其中有一个是变量,结果就在堆中。例如
String s1= "a";
String s2=s1+"b";
此时即使常量池中有ad,因为s2中有变量s1,所以结果应该在堆内存中。
String类常用方法:
int length():返回字符串的长度: return value.length
char charAt(int index): 返回某索引处的字符return value[index]
boolean isEmpty():判断是否是空字符串:return value.length == 0
String toLowerCase():使用默认语言环境,将 String 中的所有字符转换为小写
String toUpperCase():使用默认语言环境,将 String 中的所有字符转换为大写
String trim():返回字符串的副本,忽略前导空白和尾部空白
boolean equals(Object obj):比较字符串的内容是否相同 boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写
String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+”
int compareTo(String anotherString):比较两个字符串的大小
String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引 int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
注:indexOf和lastIndexOf方法如果未找到都是返回-1
String与基本数据类型转换
1.字符串转变成基本数据类型、包装类:
Integer包装类的public static int parseInt(String s):可以将由“数字”字符组成的字符串转换为整型。
类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型。
2.基本数据类型、包装类 转变为字符串:
调用String类的public String valueOf(int n)可将int型转换为字符串。
相应的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(double d)、valueOf(boolean b)可由参数的相应类型到字符串的转换。
3字符数组 转换成字符串:
String 类的构造器:String(char[]) 和 String(char[],int offset,int
length) 分别用字符数组中的全部字符和部分字符创建字符串对象。
4.字符串 转换为字符数组:
public char[] toCharArray():将字符串中的全部字符存放在一个字符数组中的方法。
public void getChars(int srcBegin, int srcEnd, char[] dst,
int dstBegin):提供了将指定索引范围内的字符串存放到数组中的方法。
5.字节数组转化为字符串:
String(byte[]):通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
String(byte[],int offset,int length) :用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。
6. 字符串 转化为字节数组:
public byte[] getBytes() :使用平台的默认字符集将此 String 编码为byte 序列,并将结果存储到一个新的 byte 数组中。
public byte[] getBytes(String charsetName) :使用指定的字符集将
此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。
StringBuffer类
StringBuffer代表可变的字符序列,可以对字符串内容进行增删,此时不会产生新的对象。
很多方法与String相同。
作为参数传递时,方法内部可以改变值。
StringBuffer类不同于String,其对象必须使用构造器生成。有三个构造器:
StringBuffer():初始容量为16的字符串缓冲区
StringBuffer(int size):构造指定容量的字符串缓冲区
StringBuffer(String str):将内容初始化为指定字符串内容
举个例子:
String s = new String("我爱玩");
StringBuffer buffer = new StringBuffer("我爱玩");
buffer.append("游戏");
那输出的就是 :我爱玩游戏
可见StringBuffer append():是用于进行字符串拼接
还有一些其他的常见方法:
StringBuffer delete(int start,int end):删除指定位置的内容
StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
StringBuffer insert(int offset, xx):在指定位置插入xx
StringBuffer reverse() :把当前字符序列逆转
注意:当append和insert时,如果原来value数组长度不够,可扩容。
StringBuilder类
StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且提供相关功能的方法也一样。
String、StringBuffer、StringBuilder三者的区别:
String:不可变字符序列
StringBuffer:可变字符序列、效率低、线程安全
StringBuilder:可变字符序列、效率高、线程不安全
注意:作为参数传递的话,方法内部String不会改变其值,StringBuffer和StringBuilder会改变其值。
在就是学完之后多做做面试题就能更将巩固自己啦。