API和正则表达式

时间:2021-11-23 07:37:16

第一章 String & StringBuilder
String类用类final修饰,不能被继承,String字符串被创建后永远无法被改变,但字符串引用可以重新赋值,改变引用的指向
java字符串中任何一个字符对应16位(2个字节)的定长Unicode编码;

java为了提高性能,静态字符串(字面量、常量、常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在则返回该对象;
*str.length();获取字符串中的字符的个数;
*int str.indexOF(String str)//在字符串中检测str第一次出现的位置,返回int型下标值,找不到返回-1值
*int indexOf(String str,int fromIndex)//从字符串的fromIndex位置开始检索str第一次出现的位置,返回下标
*int lastIndexOf(String str,int from)//str在字符串中最后一次出现的位置
面试题:
String str ="java,我爱java,我热爱java,我非常热爱java";
//问:子字符串java出现的次数

int index=0;//java出现的下标
int count=0;//java出现的次数
while((index=str.indexOf("java",index))!=-1){
System.out.println("index="+index);
count++;
index+="java".length();
}
System.out.println(count);

*String substring(int beginIndex)//截取从指定下标开始到字符串结尾结束的子字符串,返回值为String类型
*String substring(int beginIndex,int endIndex);//截取从指定下标开始到指定下标结束的子字符串,返回值为String类型
(java中很多方法经常出现两个临界值,通常都是包头不包尾)
【例】
//截取第一个逗号到最后一个逗号之间的字符串

int beginIndex=str.indexOf(",");
int endIndex=str.lastIndexOf(",");
String sub = str.substring(beginIndex+1, endIndex);
System.out.println(sub);

注意:java字符串中:中文输入法的","和英文输入法的","是不同的,写串了可导致查询结果为-1(即查询不到)

*str.trim();//去掉字符串str开头和结尾处的空白字符格

*char charAt(int index);//返回指定下标处的char字符

*str.startsWith(String prefix);//判断str字符串是否以指定前缀prefix开头,返回boolean型判断结果

*str.endsWith(String suffix);//判断str字符串是否以指定后缀suffix结尾,返回boolean型判断结果

StringBuilder字符串生成器
StringBuilder sub = new StringBuilder();//初始可放16个字符
* .append(String str);用于实现大量字符串拼接
* .insert(int offset,String str),在指定位置插入指定内容
* .delete(int start,int end);删除指定位置开始到指定位置结束之间的字符串
* .reverse(String str);完成字符串的反转

-------------------------------------------------------------------------------
第二章 Regex正则表达式 & Object类 & 包装类

RegularExpression正则表达式
定义:一串特定字符组成的“规则字符串”,用于描述/记录文本规则。
意义:方便实现对字符串进行匹配、查找、替换等复杂操作。

1)字符集合:
[abc] :a,b,c中的任何一个
[^abc] :除了a,b,c的任意字符
[a-z] :a到z中的任意一个字符
[a-zA-Z0-9] :a到zA到Z0~9中任意一个字符
[a-z&&[^bc]]:a到z除了b和c以外的任意一个字符,&&表示与的关系;

2)预定义字符集
. :任意一个字符
\d :任意一个数字字符,相当于[0-9];
\D :非数字字符,相当于[^0-9];
\w :单词字符,相当于[a-zA-Z_0-9];
\W :非单词字符
\s :空白字符
\S :非空白字符

3)数量词
X? :表示0个或1个
X* :表示0个或任意多个
X+ :表示1到任意多个
X{n} :表示n个X
X{n,m} :表示n到m个X

4)分组(),将一系列正则表达式看作一个整体,可以使用|表示或的关系
\字符转义
^ $ :边界匹配,^变是字符串开始,$表示字符串结束

String正则API

1)str.matches(regex):
将一个字符串与正则表达式进行匹配,匹配成功返回true,否则返回false
* 用户输入一个字符串,对此字符串进行校验
* 必须满足第一个字符是abc的任意一个字符
* 第二个字符是任意数字

Scanner sc=new Scanner(System.in);
boolean flag;
do {
System.out.println("请输入用户名,以a/b/c开头,包含数字");
String str =sc.next();
String regex="[abc][0-9]{2,8}";
flag = str.matches(regex);
if(flag==false) {System.out.println("输入错误,请重新输入:")
}else {System.out.println("正确:");}
}while(flag==false);

str.matches(regex)默认自带^$,在匹配时一定是String.matches(regex)

判断email格式是否合法:
String regex1 ="^[a-zA-Z0-9_.-]+@([a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4}$";

2)str.split(String regex);返回值为字符串数组
String [] s = email.split("[_@\\.]");
System.out.println(Arrays.toString(s));
//[mr, w123, baidu, com, cn]

3)replaceAll(String regex,String replacement)
//将字符串中符合正则表达式regex规则的字符串替换成replacement
String s2="中国,没有国中之国";
String s3=s2.replaceAll("中国","*");
System.out.println(s3);
//*,没有国中之国

Object(鼻祖类)
如果定义一个Java类时没有使用extends关键字声明其父类,则其父类默认为:java.lang.Object类
Object类型的引用变量可以指向任何类型对象。

1)toString()重写
* Object类中的toString()默认返回一个对象的字符串表示,
* 而这个字符串在实际开始中没有什么具体意义,通常强烈建议
* 在子类中重写toString()使其具有具体的意义
* 重写规则:通常此方法将对象的属性值作为字符串返回
/*
* 在内存中,point是引用,保存的对象的地址值
* 打印输出引用时会调用该类的toString(),如果该类没有
* 那么,调用父类中的toString()
* Object类中的toString()作用:返回一个表示该对象的字符串
* 字符串形式:类名@散列码(十六进制的整数)
* 散列码是根据地址值经过算法计算得出的一个整数
*/
Point point = new Point(10, 20);
System.out.println(point); //此对象表示的点的坐标

2)equals()重写
* Object类中的equals()方法作用等同于==
* 用于比较两个引用是否指向同一个对象
* 在实际开发中,通常建议根据实际业务重写equals方法,使得
* 对象之间的比较更具有实际意义。
* javaAPI中的很多类已经重写了equals(),如String

包装类
在进行类型转换的范畴内,有一种特殊的转换,需要将int这样的基本类型转换为对象;
所有基本类型都有一个与之相对应的类,即包装类(wrapper)
包装类是不可变类,在构造了包装类对象后,不允许更改包装在其中的值
包装类是final的,不能定义他们的子类
Number抽象类,是Byte,Double,Float,Integer,Long,Short类的父类;
Number的子类必须提供方法(将表示的数值转换为byte,double,float,int,long,short等基本类型)
intValue() 以int形式返回指定的数值
doubleValue() 以double形式返回指定的数值
floatValue() 以float形式返回指定的数值
Number n = 123;
Number m=123.45;
int a =n.intValue();//a=123;
double d =n.doubleValue();//d=123.0

int a1 =m.intValue();//a1=123;
double d1 =m.doubleValue();//d1=123.45;

1)Integer常用功能:
表示常量:
static int MAX_VALUE值为2的31次方减1;表示int类型能表示的最大值
static int MIN_VALUE值为-2的31次方;表示int类型能表示的最小值
2)Integer静态方法parseInt:用于将字符串传为int

Integer i =new Integer(3);//将3转换为对象i
double d=i.doubleValue();//将对象中的值用于计算,
System.out.println(d);//3.0
Double d1 =Double.valueOf(d);//将数字表示的值用于面向对象开发

/*
* parseInt(String),将String转换为int类型
* 转换的前提是该String类型的值一定是整数类型
* 否则失败,抛出异常
*/

String str ="123";
int s1=Integer.parseInt(str);
System.out.println(s1+4);//123+4=127
str="a123";
//s1=Integer.parseInt(str);
System.out.println(s1);//NumberFormatException数字格式异常

API和正则表达式的更多相关文章

  1. 详解Java API之正则表达式

    正则表达式描述的是一种规则,符合这种限定规则的字符串我们认为它某种满足条件的,是我们所需的.在正则表达式中,主要有两种字符,一种描述的是普通的字符,另一种描述的是元字符.其中元字符是整个正则表达式的核 ...

  2. Java基础学习笔记十三 常用API之正则表达式、Date、DateFormat、Calendar

    正则表达式 正则表达式(英语:Regular Expression,在代码中常简写为regex).正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规则的字符串.在 ...

  3. Java API 之 正则表达式

    一.基本概念 在项目中我们经常性做的一件事是“匹配”字符串 比如: 1.我们要验证用户输入的手机号是否合法? 2.验证设置的密码是否符合规则? 3.或者替换指定字符串中的一些内容. 这么一看,似乎正则 ...

  4. 常用API(正则表达式、Date、DateFormat、Calendar)

    常用API 今日内容介绍 u 正则表达式 u Date u DateFormat u Calendar 第1章 正则表达式 1.1 正则表达式的概念 正则表达式(英语:Regular Expressi ...

  5. Java 正则表达式详解

    Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达式API. 正则表达式 一个正则表达式是一个用于文本搜索的文本模式.换句话说,在文本中搜索 ...

  6. java正则表达式语法详解及其使用代码实例

    原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...

  7. Java开发知识之Java的正则表达式

    目录 正则表达式 一丶什么是正则表达式 1.正则表达式简介 2.无正则表达式判断代码 3.使用正则表达式代码. 二丶正则表达式API 三丶正则表达式语法格式 1.正则表达式语法 正则表达式 一丶什么是 ...

  8. Java编程的逻辑 (89) - 正则表达式 (中)

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  9. Java 正则表达式&lpar;精华&rpar;

    英文:Jakob Jenkov译文:严亮链接:ifeve.com/java-regex/ Java 提供了功能强大的正则表达式API,在java.util.regex 包下.本教程介绍如何使用正则表达 ...

随机推荐

  1. js-JavaScript高级程序设计学习笔记7

    第十一章 DOM扩展 1.对DOM的两个主要的扩展是Selectors API(选择符API)和HTML5. 2.jQuery的核心就是通过CSS选择符查询DOM文档取得元素的引用,从而抛开了getE ...

  2. 傅里叶变换:MP3、JPEG和Siri背后的数学

    九年前,当我还坐在学校的物理数学课的课堂里时,我的老师为我们讲授了一种新方法,给我留下了深刻映像.我认为,毫不夸张地说,这是对数学理论发现最广泛的应用.应用的领域包括:量子物理.射电天文学.MP3和J ...

  3. 分布式服务框架HSF学习

    HSF提供的是分布式服务开发框架,taobao内部使用较多,总体来说其提供的功能及一些实现基础:1.标准Service方式的RPC  1).Service定义:基于OSGI的Service定义方式  ...

  4. Java Zip压缩实现

    最近在自学javaWeb,先复习一下java,把还给老师的东西再找回来(知识如果不用很快就会忘记啊).. 今天看到了zip压缩,决定要整理一下. java将有关zip压缩的内容都封装在java.uti ...

  5. animate CSS动画程序接口(仅Chrome可用)

    jQuery中很早就提供了animate方法,使用它可以很方便地实现一些简单动画效果.后来CSS3中也提供了animation用于动画效果制作,但CSS本身的可操作性太差,所以用起来并不方便.现在最新 ...

  6. Java学习笔记10(面向对象三:接口)

    接口: 暂时可以理解为是一种特殊的抽象类 接口是功能的集合,可以看作是一种数据类型,是比抽象类更抽象的"类" 接口只描述所应该具备的方法,并没有具体实现,具体实现由接口的实现类(相 ...

  7. abstract class VS interface

    关于抽象类 abstract class: 1. 抽象方法必须在抽象类中 2. 抽象类和抽象方法要用abstract 关键字修饰 3. 不可以用new 来实例化一个abstract类,因为调用抽象方法 ...

  8. K8S Calico

    NetworkPolicy是kubernetes对pod的隔离手段,是宿主机上的一系列iptables规则. Egress 表示出站流量,就是pod作为客户端访问外部服务,pod地址作为源地址.策略可 ...

  9. 【BZOJ1999】【NOIP2007】树网的核 单调队列优化DP

    题目描述 题目很长,大家自己去看吧. bzoj vijos 原题\(n\leq 300\) 加强版\(n\leq 500000\) 题解 这种东西当然要猜结论的啦,否则会比较麻烦. 结论1:如果有很多 ...

  10. python学习之路07

    Python中你可能不关心的这几个关键字:break.continue.pass 1.break 作用:跳出循环[直接跳出整个循环,继续执行后面的代码] 1.特殊情况一 #当break使用在嵌套循环中 ...