目录
String类
引用数据类型
不可变的字符序列
底层是一个byte字节数组构成的,且是有final修饰的
为什么String是不可变的?
我看过源代码,String底层是一个byte字节数组构成的,并且是被final修饰的,因为数组一旦创建长度不可变,并且是被final修饰的引用 一旦指向某个对象后不可再指向其他对象,所以Srring是不可变的;
构造器
String(什么都能放);
还可以通过静态方法产生String对象:String.valueOf(什么都能放);
或者直接:String str = "ronglin";
常见Api
charAt(int index):
给定字符的索引下标,返回该下标对应的字符 底层实现:就是返回字节数组对应的index的字符
compareTo(String anotherString):
比较两个字符串大小,a.compareTo(b)返回正数表示a大,返回负数b大,返回0相等 找出两个字符串最小的长度,然后依次遍历 ,找到第一个不相同的字符,用他们的ASCII码相减
2、如果遍历完了都没找到一个不相同的字符,就返回两个长度之差
compareToIgnoreCase(String str):
忽略大小写的compareTo 转成大写或小写 再比较
concat(String str):字符串拼接
实现:先创建 新数组 ,将原数据数据拷贝到新数据 再将拼接字符串拷贝新数组,返回以新数组构建String对象
contains(CharSequence s): a.contains(b) a中是否包含b
实现:调用indexOf
contentEquals(CharSequence cs);不区分大小写来进行比较
copyValueOf(char[] data): 给定一个数组,将这个数组给你包装一个String对象出来
copyValueOf(char[] data, int offset, int count):拷贝
endsWith(String suffix):是不是以suffix结尾的
startsWith(String prefix) :是不是以prefix开头的
equals(Object anObject):两字符是否相等
equalsIgnoreCase(String anotherString):两字符是否相等,不区分大小写
format(String format, Object... args) getBytes():把字符串转成字节数组
getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符串的srcBegin到srcEnd之间的字符到到dst数组中的dstBegin位置
indexOf(int ch):
查找字符在字符串中所在的位置,不存在返回-1
实现:遍历,找到就返回该位置
isBlank():是否为空 空格 ""都是空
isEmpty():空格不为空
join(CharSequence delimiter, CharSequence... elements):字符串使用分割符进行连接
lastIndexOf(int ch):查找 length():长度 repeat(int count):将字符串重复多少次(从后向前遍历)
replace(char oldChar, char newChar):替换
replaceAll(String regex, String replacement) split(String regex):按分隔符进行分割
strip():去掉前后空格
stripLeading():去前面空格
stripTrailing():去后面空格
substring(int beginIndex):截取
toCharArray():把字符串转成字符数组
toLowerCase():转小写
toString();
toUpperCase()
trim() :去掉前后空格
valueOf(boolean b):将其他基本类型转换为String
Object【】split(String str);以是str进行分隔放进数组;
String反转
**
* 反转字符串
* @author ronglin
* @version 1.0
* @crate_time 2021/5/7 21:33
*/
public class Reverse {
@Test
public void test(){
String str="ronglin";
//调用方法反转
String revrese = revrese(str);
//输出反转后的结果
System.out.println(revrese);
}
/**
* 字符串反转
* @param str 要反转的字符串
* @return
*/
public static String revrese(String str){
//将字符串转换成字节数组
byte[] val = str.getBytes();
//数组的最后一个元素的下标
int n = val.length - 1;
for (int j = (n-1) >> 1; j >= 0; j--) {
//最后一个元素和第一个元素交换,依次循环交换位置
int k = n - j;
byte cj = val[j];
val[j] = val[k];
val[k] = cj;
}
//将byte数组转换成String返回
return new String(val);
}
}