String
string是字符串类型同时也是一个类
String , StringBuffer ,StringBuilter的区别
String是不可修改的,后两者是可以被修改的
StringBuffer和StringBuilter的大部分功能是相似的
StringBuffer采用的是同步处理,属于多线程安全操作, 而StringBuilter未采用同步处理,属于线程不安全操作
string这个类final修饰的,是不可以被继承的,同时它实现了很多个接口
String有三种书写语法,同时String是可以直接打印输出的,因为它本身就重写了toString方法
在String中length()是计算字符串长度的,且它是一个方法
而没有括号的length是计算数组的长度的
isEmpty()是判断所指的对象是否为空
而我们所指的对象如果是null,在使用isempty去判断就会报空指针异常,因为null是不指向任何的对象
String比较
分为4种方法
1.==(比较两个值的地址是否相同)
2.equals(比较两个值是否相同)
3. compareTo(比较长度)
4.compareToIgnoreCase(忽略大小写比较)
这里的判断是判断他们两个的地址是不是一样的
如果想要比较里面的值是否相同就要使用equals来进行比较,但是这里的equals不是object里面的那个
因为object是所有类的父类,而String作为子类它重写了equals方法
这里的比较结果是相等的,因为这种直接赋值的比较是“字符串的常量池”,什么意思呢,就是在堆中会有一个常量池,里面存的就是双引号引起来的字符串的常量值,
常量池里面会先看里面有没有存在当前的字符串,没有的话就会存进去,有的话就获取这个字符串在常量池当中的地址
字符串比较大小
字符串比较大小是用compareTo来比较的,同时String也是重写了compareTo方法的,
在String里面比较大小逻辑:
长度相同的情况下,第一个不一样的字符的大小就是整个字符串的大小,比较的是字符的ASCII码值
两个字符串长度不一样,会先比较两个长度的差值,在这个差值范围内,有不一样的字符就能比较出大小,若都是一样的就看谁长谁就大
compareToIgnoreCase是不分大小写比较
字符串的查找
charAt是查找某个下标的字符
indexOf是找某个字符的下标,也可以从某个位置开始找某个字符,是从前往后找
lastIndexOf是从后往前找字符,也可以规定从哪个位置开始找
字符串转化
valueOf可以把任何数据结构转换成字符串的形式输出,底层逻辑都是重写了toString方法,也可以把对象转化成字符串
字符串也可以转换成数字
只需要把要转化的类型的包装类调用parse加上要转换的类型就可以实现转换
大小写转换
是通过toUpperCase把字符串转换为大写,但是这里的转换并不是在原来的字符串上转换,而是产生了一个新的对象
toLowerCase是把字符串中的全部的大写字母转换为小写,
字符串转换数组
使用toCharArray来进行转换
字符串格式化
使用format来进行格式化转换
字符串的转换
replace/replaceAll 把所有要转换的字符全部替换成要替换的字符
replaceFrist 把从头到尾第一个出现的字符替换
都不是在原有的字符串替换,而是变更成为一个新的对象
字符串的拆分
使用split来进行拆分,从某个字符进行拆分,返回值是String数组,也可以进行多次分割中间写上|进行隔开即可,也可以在后面实现要分隔的次数
如果要使用这几个符号进行分隔(. * \ +) 都要加上转义字符(\\)
字符串的截取
使用substring通过某个下标获取到某个字符,也可以通过区间截取,区间截取都是左闭右开
trim把字符左右的空格去除,中间的空格去除不了
字符串的不可变性
为什么说不可变呢,
因为我们的string的原码里是有一个value和hash,而我们的string内部的value这个数组是被private修饰的,它只可以在当前类当中使用
字符串的修改
stringBuilber和stringBuffer的方法都是一样的
区别在于
在于你使用的是多线程还是单线程,多线程就使用StringBuffer,两者的内部功能基本都是一样的
在一个字符串的后面添加新的东西,通常我们都是直接写成这种赋值的方式,且string是不可变的这时候就需要产生一个新的对象来进行添加另一个对象,效率就会非常的慢,且它返回的是一个新的对象
若直接使用stringBuilber.append来进行尾部追加效率就会变得很快,因为它只会产生一个对象,然后在这个对象后面添加你想添加的东西,返回的是当前对象的引用
setCharAt获取到某个下标的字符将其替换成别的字符
insert在某个下标位置插入一个新的字符串
delete和deletecharat从某个下标/某个区间开始删除字符
reverse反转字符串,把当前字符串全部反过来,且不会产生新的对象也不需要返回值
stringBuilder和stringbuffer要转换成string类型时需要通过调用tostring来进行