字符串及其相关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);
字符串及其相关API和正则表达式相关推荐
- Java正则表达式中的捕获组的概念及相关API使用
要弄清这三个方法,首先要弄清Java正则表达式中的捕获组的概念.捕获组也就是Pattern中以括号对"()"分割出的子Pattern.至于为什么要用捕获组呢,主要是为了能找出在一次 ...
- 常见API、正则表达式、Lanbda、算法
1.常见API - Date Date类代表当前所在系统的日期时间信息. Date的构造器 Date d = new Date(); 名称 说明 public Date() 创建一个Date对象,代表 ...
- (Spring程序开发)简介程序开发步骤配置文件相关API
1Spring简介 1.1 Spring是什么 Spring是分层的Java SE/EE应用full-stack 轻量级开源框架, 以IoC(Inverse Of Control:反转控制) 和**A ...
- java正则表达式及api_Java API 之 正则表达式
一.基本概念 在项目中我们经常性做的一件事是"匹配"字符串 比如: 1.我们要验证用户输入的手机号是否合法? 2.验证设置的密码是否符合规则? 3.或者替换指定字符串中的一些内容. ...
- 目录操作的相关API 和 获取文件的属性信息
目录 一,目录操作的相关API 1,创建或删除一个空目录 2,打开目录 3,读一个目录 4,关闭一个目录 二,获取文件的属性信息 1, stat,fstat,lstat 用来获取文件的属性信息 2,a ...
- 学习笔记(一):Java中Stream的基本用法和相关API详解
目录 引言 一.什么是Stream 二.Stream有什么用 三.Stream的分类 四.常用的Stream创建方法 1. Stream.of()方法 2. Arrays.stream() 3. 集合 ...
- 安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例
安卓自定义view中 绘画基本图形点线面,矩形,方形,圆,扇形,文字及沿着特定方向布局,自定义圆角ImageView图片等等相关api使用方法及举例,图片压缩处理逻辑 本文旨在介绍自定义View的实现 ...
- 原生JS中DOM节点相关API合集
原生JS中DOM节点相关API合集 节点属性 Node.nodeName //返回节点名称,只读 Node.nodeType //返回节点类型的常数值,只读 Node.nodeValue //返回Te ...
- php srelen 字符串_比较详细Python正则表达式操作指南
Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 Emecs 风格的模式.Emacs 风格模式可读性稍差 ...
最新文章
- php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法
- 前端优秀博客网站收集
- 苹果电脑通过密钥对的方式登录linux系统
- 使用模板有什么缺点?如何避免?
- dd linux 尾部添加0_Linux文件目录命令整理Linux学习
- java消息头,Java网络编程从入门到精通:HTTP消息头字段
- java类的修改三个方面_Java 编程的动态性,第 6 部分: 利用 Javassist 进行面向方面的更改--转载...
- 最高的奖励 51Nod - 1163(贪心+并查集)
- WordPress好看的QQ微信等登录插件二开美化版
- 通俗易懂的Monte Carlo积分方法(二)
- Cocos2d-x场景(Scene)详解
- php socket邮箱,phpsocket.io php版本的socket.io
- Leetcode961. N-Repeated Element in Size 2N Array重复N次的元素
- 九龙山风电场电气一次部分初步设计
- Android studio开发一:三个页面简单实现QQ登录界面的延时跳转
- 花了3个小时解决了和异地女朋友一起看电影的需求(内附源码)
- ezcast 有线版 升级
- 计算机组成原理实验报告JMPR,计算机组成原理实验四:组合逻辑控制器部件教学实验...
- 使用Verilog来实现奇数分频
- 有哪门语言是所有优秀程序员都应该无差别掌握的?