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来进行

 

posted @ 2024-11-02 21:04  油头男孩  阅读(2)  评论(0编辑  收藏  举报