Java基础-string

Java基础-string

六月 30, 2020

Java基础

String类

1.String 字符串常量

1
public final class String
1
2
String str = "hongjun500";
int length = str.length();

创建了一个字符串,值为hongjun500;length()方法可以得到字符串的长度,返回int类型;””的长度为0,” “长度为1(空格)

1
str.charAt(int index); // 得到指定位置的字符,index索引值从0开始
1
2
3
str.indexOf('n'); // 得到字符‘n’第一次出现的位置(索引值);
str.lastIndexOf(0);// 与之相反
如果字符不存在则返回 -1

字符串的截取

1
2
str.substring(1); 获取从索引值1开始到结尾的字符串;
str.substring(1,2); 获取从索引值1开始到索引值2(不包含)的字符串;

字符串替换

1
str.replace("5","6");

字符串分割

1
2
str.split(","); 将字符串以“,”分割成String[];
str.split(",",1); 将字符串以“,”分割成String[]并且分割次数为1,这种会影响到最后的结果集,一帮情况下比较少见(视情况而定);

字符串大小写转换

  • toLowerCase() 将字符串转换为小写
  • toUpperCase() 将字符串转换为大写

字符串比较

1
str.equals("h"); 比较字符串内容是否相同,得到一个boolean类型的值;运算符‘==’则是比较地址

2.StringBuilder

StringBuilder 字符串变量(线程不安全对字符串频繁的进行操作时需要用到)

1
StringBuilder  strBuilder = StringBuilder();初始为16个字符

字符串变量的拼接、容量、替换

1
2
3
4
strBuilder.apped("hongjun");
strBuilder.apped();支持各种类型的连接
strBuilder.capacity();获取当前容量(可以存储的字符数,超过了之后会自动分配)
strBuilder.replace(1,2,"");将索引值12(不包含)的字符替换为"";(常用的做法是使用String.replace(),再将String拼接上去)

截取和String的一样

字符串反转

1
strBuilder.reverse();

3.StringBuff

StringBuilderStringBuilder 一样都是字符串变量,方法大体上都是相同的

1
2
3
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
1
2
3
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence

如上这两个都是继承了相同的抽象类和并且实现了相同的接口,但是需要注意它们各自重写父类的方法是不一样的

例如常用apped()方法:

StringBuilder:

1
2
3
4
5
@Override
public StringBuilder append(String str) {
super.append(str);
return this;
}

这是直接调用了父类的append方法

StringBuffer:

1
2
3
4
5
6
7
@Override
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
// private transient char[] toStringCache;

有两处不一样,一是加了和线程有关的 synchronized 关键字,二是有一个字符数组的缓存,每次修改之后就把之前的清掉

通过以上可以明白为啥总是会有说(用String操作少量的数据; StringBuilder操作大量数据;StringBuffer操作多线程下的大量数据)。

关于多线程的一些东西,鉴于工作中还没有一些实际运用的场景(多线程举足轻重),仅仅是看文章了解知其然而不知其所以然,此处暂时不做阐述。。。