字符串及其相关API和正则表达式

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值