String:字符串类型
字符串中常用的一些方法:
* length和length()的区别
* 1.length():获取字符串长度的方法
* 2.toUpperCase():将字符串全部转换成大写
* toLowerCase():将字符串全部转换成小写
* 3.int indexOf(Sting str):找到目标字符串中第一次出现str字符串的位置(下标值)
* 注意:字符串的下标也是从0开始的
*
* int indexOf(String str,int index):找到目标字符串中第一次出现str的位置,前提是,
* 从目标字符串的index位置开始找起
*
* 4.subString(int start,int end):字符串的截取
* 从目标的start位置开始截取,截取到end位置
* 注意:字符串的截取是含头不含尾的
* subString(int strat)
* 从start位置开始截取,到尾部
*
* 5.charAt(int index):获取目标字符串中指定index位置的字符,没找到会返回-1
* 6.trim():去除字符串两边的空格
String str="123":这样的字符串定义和赋值,会在一个叫做常量池的地方生成字符串,而这个常量池是会重用已有的字符串对象的,下面的str==str3结果为true,是因为str在定义之后,会在常量池中会在常量池中存放一个"123",如果再定义一个字符串str3="123",就会先在常量池中先找是否存在这样一个值,如果存在,则直接将这个值引用过来了,所以他们使用==比较,地址是一样的,结果就是true.
注:常量池在java8之前,是存在堆中的,而java8以后,常量池是存放在方法区中
注意:正因为字符串写出来就会在常量池中生成对象,所以,我们操作字符串的时候,一般都不使用String,因为一旦操作该字符串的值,就会生成新的字符串对象
例如:String str="123"
str="234";
看起来是将str的值改变了,但实际,会在常量池中生成两个字符串对象
一个是"123",一个是"234"
所以我们一般都用StringBuffer和StringBuild来生成字符串对象
API:java中的类库(别人写好的类,我们只需要使用这里面的方法来做事情)这里的StringBuffer和
StringBuild类就是一个API.
StringBuilder和StringBuffer:
因为String字符串在操作的时候,会不停的生成新的字符串对象,所以基于这个特点,
如果频繁的操作字符串,会导致产生过多的废弃字符串对象,因此,StringBuild和StringBuffer
是专门解决这个问题的,他们两个在操作字符串的时候,是基于原来的字符串来实现的
面试:StringBuild和StringBuffer的区别?
-StringBuild是非线程安全的,效率高(不用排队的)
-StringBuffer是线程安全的,效率低(需要排队的)
只有StringBuilder和StringBuffer里面才有这些方法
append():往字符串末尾追加内容
insert():往字符串的指定位置插入内容
reverse():字符串的反转
正则表达式:
正则表达式:表示按照一定的规则定义出来的表达式,通常用来做前端或者后端的一些数据验证,例如:用户名和密码的格式等
这个其实就是给一个抽象格式的字符串,用来规范某一个字符串的格式,之后再用str.matches()去和这个抽象字符串比较如果匹配上了则会返回true;
匹配字符串的方法:str.matches(String regex)
*str:指的是需要验证的字符串内容
*regex:是正则表达式
*如果匹配上了,则会返回一个true
[abc]:表示abc中的任意一个字符
[a-z]:表示a-z中的任意一个 字符
* [A-Z]:表示A-Z中的任意一个字符
* [^abc]:表示除了abc的任意一个字符
* [a-zA-Z]:表示a-zA-Z中的任意一个 字符
* [0-9]:表示0-9中的任意一个 字符
* [a-z && [^abc]]:表示a-z中除了abc的任意一个字符
* \d:表示任意数字[0-9]
* \w:表示任意的字符[a-zA-Z0-9]
* \s:表示空白字符
* \D:表示任意非数字
* \W:表示任意的非字符
* \S:表示非空白字符
*
* X?:表示0个或者1个X
* X+:表示1个或者多个x
* X*:表示0个或者多个X
* X{n}:表示n个X
* X{n,}:表示n到任意多个X
* X{n,m}:表示n到m个X
注意:正则表达式中的\,.等特殊符号,如果用字符串表示出来的时候,是需要转义的
笔试题:如何使用字符串表示出正则当中的一个\
\\:正则当中表示\,需要转义
\\\\:字符串表示的时候,就需要对正则中的两个\都进行转义
字符串中一些其他的API的应用
一. split(String regex):字符串的拆分
regex:根据这个内容来拆分字符串(可以是一个正则表达式)
这个split常用在给网络上的图片命名,因为用户自己取的图片名字有时候会有重名,为了避免这种重名的图片在网络上被错误的传输,就只获取jpg这个图片的格式,前面的名字用当前的毫秒值来命名,毫秒值:是从现在到1970年1月1日Unix操作系统诞生的时间总和.
代码如下:
str="1.1.jpg";
s=str.split("\\.");
System.out.println(Arrays.toString(s));
//获取当前系统的毫秒值(1970年1月1日
long t=System.currentTimeMillis();
System.out.println(t);
//使用系统的毫秒值拼接上传图片的后缀
str=t+"."+s[s.length-1];
System.out.println(str);//1626769976978.jpg
二.
正则当中也支持逻辑或:
游戏中的和谐语句,比如傻逼,脑残之类的词语是会被替换成***
replaceAll(Sting regex,String str):字符串的替换
将目标字符串中符合regex正则表达式的内容替换成str内容
代码如下:
String regex="(qnmlgb|nc|nt|zz)";
str="我qnmlgb,你个zz!";
str=str.replaceAll(regex, "%*#");
System.out.println(str);