java 第10天 String创建以及各类常用方法

一.String创建的两种形式

1.通过new的当时

String str=new String();

2.不new的方式 

String s1="";

二.new 和不new的方式的区别是什么

不new创建的字符串首先是拿着值去常量池中查找,是否有该内容,有就用常量池该字符串的地址,没有的话在常量池中创建并使用

new的方式创建的字符串首先在堆中创建并赋予字符串值,然后到常量池中查找,如果有就不做任何处理,如果没有就在常量池中开辟该字符串

三.String和Stirng Buffer、String Builder的区别

底层他们都是利用char[]数组开辟空间

关于字符串追加问题

String 需要追加元素 肯定五步走
1 开辟新的数组空间
2 老元素复制到新的空间中
3 改变数组对象存储的地址
4 回收老数组空间
5 给最后的空间赋值【追加】

StringBuffer/StringBuilder 底层开辟的空间个数等于字符串的长度+16缓冲区

StringBuffer/StringBuilder 追加元素 直接先存储到缓冲区中 追加连接效率高

四.StringBuffer和StringBuilder之间的区别

StringBuffer 同一时间允许一个线程进行访问 效率较低 但是不会产生并发问题

StringBuilder 同一时间允许多个线程进行访问 效率较高 但是可能产生并发问题

五.String中常用的20个方法

跟长度相关 1个

int类型的 

 length() :

返回字符串的长度[字符的个数]  和密码校验有关

跟数组相关 3个

byte[]返回类型 

1. getBytes() :

byte[] getBytes() : 使用自己电脑的默认字符集【编码】将此 String 编码为 byte 序列。
ascii 一个字母 - 一个字节 / 一个汉字 - 两个字节
unicode 一个字母 - 两个字节 / 一个汉字 - 两个字节 【 char

 char[]类型的

2.toCharArray()

char[] toCharArray() : 打碎字符串 放入一个 char[]
char[] 的大小 == 字符串的长度

String[]类型的

3.split(String x):  

String[] split(String x) : 按照指定的内容劈开字符串
打碎 String[] split("")
"hello".split("") => [][]["h"] ["e"] ["l"] ["l"] ["o"]
如果要劈开的内容 x 在最开始出现一次 最前面多留一块空间 空间的内容是 "" 【空串】
如果要劈开的内容 x 在最后始出现一次 最后不会多留空间
如果要劈开的内容 x 在中间连续出现两次 中间多留一块空间 空间的内容是 "" 【空串】

注意:

利用split也能打碎字符串 为String 双引号类型””,而toCharArray 是单引号的char类型 

和判断相关5个

1. boolean equals(String)  

判断调用者和参数是否内容一样[精准匹配]

应用场景:密码精准匹配

2 boolean equalsIgnoreCase(String)

忽略大小写的比较

3 boolean contains(String s);

调用者字符串中是否包含s

参数字符串s在调用者中连续存在 并且参数字符串的长度要小于等于调用者字符串的长度

4 startsWith(String):

是否以指定内容开头

5 endsWith(String);

是否指定内容结尾

与改变内容相关【接收!】4个

1 toUpperCase();

将所有内容 字母变成大写

2 toLowerCase();

将所有内容 字母变成小写

3 String replace(String x,String y);  

将所有的x 替换成y

4 String replaceAll(String regx,String y);

第一个可以传入正则表达式 --范围

[]---》表示某一个位置的范围

[a-z] 小写字母

[A-Z]

[a-zA-Z] 所有字母

[\u4e00-\u9fa5] 所有中文范围

S1=s1.replaceAll(“[a-zA-Z]”,”*”);//表示 是字母就替换成*

 和下标有关的3个

1 charAt();

定位到每一个字符 charAt(int Index);返回的char类型 范围【0,str.length()-1】

2 indexOf(String str)

 判断参数内容第一次出现的内容 没找到返回-1

3 lastIndexOf(String);

返回参数内容所在的位置【最后一次】

2和3 来判断 当前内容只出现一次

Boolean matches(String regx); 这个很牛的

正则表达式

正则表达式
    "[A-Z]" 大写
    "[a-z]" 小写
    "[0-9]" 数字 "\\d"
    "[\u4e00-\u9fa5]" 中文

    [a-z]{1}  => [a-z] 校验一位
    [a-z]{3}  => [a-z] 校验长度是3 + 每一个字符必须是a-z
    [a-z]{3,5}  => [a-z] 校验长度[3-5] + 每一个字符必须是a-z
    [a-z]{3,}  => [a-z] 校验长度>=3 + 每一个字符必须是a-z

猜你喜欢

转载自blog.csdn.net/Miserables_/article/details/143017965