hashCode()-重写方法,返回字符串对象的哈希码值
不同对象调用Object里的hashCode方法返回值不一样-eg:2个不同的new Object对象(和环境与程序有关)
Java中所有的字符串,都是String类的对象-eg:String s=”abc”;
String s=”abc”;Syso(s.hashCode());与Syso(“abc”.hashCode());相比,后者更好一些,永远不会出现空指针
只要两个字符串对象的内容一样(字符和顺序都相同),返回的哈希码值相同
indexOf()
String str=”abc”
Syso(str.indexOf(“bc”));1 -返回子串在原串中第一个出现的字符的下标,默认从前往后找;若没有找到结果,返回-1
拓展-从特定位置开始找,str.indexOf(”f”,”4”)-(子串,起始下标)-从起始下标处找
(1个char)+””-字符变成字符串
intern()-把引用的地址值(new …)指向常量池(相等时才能指向同一个区域,不同时(“ab”与”abc”)虽然也指向常量池,但不是同一个区域)
String str1=new String(“abc”);
String str2=”abc”;
Syso(str1==str2); false
//str1=str1.intern(); 加在2、3步之间后true
Syso(str.isEmpty());-判断字符串是否是空串-即没给值(没有元素“”或String str=new String();)
将str.replace(‘old char’,’new char’);-(要替换的char,换成char)char类型
原串并没有改变,返回一个新串
Java中提供了大量不改变原串的方法(返回的是1个新串),给String类
str.substring()-截取一个子串
str.substring(2)-返回一个从起始下标开始往后截取的子串,截取的时候包括起始下标,如果给出的下标值等于字符串长度,则返回一个空串(如果超了就报错)
str.substring(2,5)-可以给定起始下标和结束下标,包括起始下标但不包括结束下标(左闭右开)
toLowerCase()大写转小写
反之toUpperCase()-小写转大写
str.trim()-去除前面和后面的空格全去掉(掐头去尾),包括制表符带来的空格
valueof()-将一个其他类型的量放在括号中,将其转化为字符串
boolean b=false;
String s=String.valueof(b);
Syso(s);false -将其转化为字符串
Syso(arr整型数组/ch字符数组);时,一个返回地址值,另一个返回拼接在一起的所有元素值,为何
int[] arr={1,2,3}; //ValueOf()底层调用Object的toString()拼接地址值
char[] ch={’1’,’2’,’3’,}; //针对char数组,依次打印元素值
若要显示地址,则syso(ch.toString());
开发工作,最常接触的就是字符串
正则表达式(class Pattern)
通过专门的语法对字符串进行精确匹配
待匹配字符串 String str=”abc”;
- 创建出Pettern类对象-指定匹配规则 Pattern p=Pattern.compile(“abc”);
- 把待匹配的字符串和匹配规则进行关联 Matcher m=p.matcher(str); //还要创建对象
- 进行匹配 syso(m.matches()); //都是”abc”返回true
简写成一步的形式:syso(str.matches(“ab1c”)); //返回false
匹配字符串abd/cfg/kjl,三组各挑一个时
Syso(str.matches(“[abd][cfg][kjl]”)); 语法:[]-任意匹配其中一个
匹配数字
Syso(str.matches(“[0-9]”)); 语法:[起始-结束]-起始到结束的范围任意匹配一个(两头包括在内)或写为Syso(str.matches(“\d”)); 1个”\”系统会认为其是转义字符,消耗一个”\”,所以2个”\”,”\d”也代表0-9(可以理解为,正则转义又消耗了一个”\”)
匹配除x/y/i外,其他任意三个元素字符串
Syso(str.matches(“[^xyi]”)); ^表示非
符号“.”代表匹配任意字符syso(str.matches(“.”));
匹配”.”syso(str.matches(“\.”)); -“.”可用于匹配小数、文件后缀
匹配”\”,”\”会报错所以加上一个”\”变为匹配“\”-”\\”,字符转义去掉2个\,正则去掉1个
匹配“\t”,”-\-\\t”皆可
eg:匹配以a开头,数字结尾且最少3个字符组成的字符串,syso(str.matchs(“a.+[0-9]”));
数量词:
+,修饰前面字符,表示前面字符出现的次数-最少出现一次(>=1)
?,修饰前面字符-最多出现一次(<=1,即0次或1次)eg(“[0-9].?[a-z]”);
*,修饰前面字符-可以不出现,也可以出现多次(包括一次)
eg:匹配5个a字符组成的字符串,syso(str.matches(“a{5}”));
(“.{n,}”);-前面的字符最少出现n次(最少出现,包括刚好出现,左闭)
没有最多出现({,n}),因为会包括负数,会报错
可以组合使用(“.{2,8}”); -前面的字符出现的次数最小n最大m -eg:密码应用
正则用于场景匹配
案例:
-
匹配一个字符串内容是否是小数-(“0\.\d+|[1-9]\d*\.\d+”);(最左边的数不能为0)
“|”-或-表示前后2个表达式没有关系 -
匹配一个字符串内容是否是密码(由小写英文字母、数字、下划线组成)(上述组成里的三类数据最少出现两类)(范围6-12位)
判断参数是否为null;
If(!(str.matches(“[a-z0-9_]{6,12}”)))、return false把不正常的范围与组成排除掉
判断是否出现小写英文字母if(str.matches(“.[a-z].”))、if(str.matches(“.\d.”))、if(str.matches(“._.”))-(每类字符有3种位置,左中右,可简化为1类代码)
每个if里有个count++
Return count>=2; 省下1个if返回T -
匹配邮箱(小写英文字母、数字、下划线、范围8-12)@(小写英文字母、数字、下划线、范围4-8位).com、.cn、.com.cn都要匹配
(“[a-z0-9_]{8-12}@[a-z0-9_]{4-8} (\.com)”+
“| [a-z0-9_]{8-12}@[a-z0-9_]{4-8}(\.com)?( \.cn)”);
“”+””可用加号连接
eg:匹配含有ab的字符串 -(“.ab.”);-同上,情况三合一
匹配含有2个ab的字符串 -(“.*ab.ab.”); 后面与前面重复时有简略形式吗?
()-捕获组-(“.(ab).\1.*”); 底层对括号内的内容捕获,并编号,写编号即可拿出值
捕获组编号-遇见”(“就开始编号,直至找到与之对等的”)”结束,(数据结构里栈的思想)
应用:AAAA-(“(.)\1+”);
ABAB-(“(…)\1”);
AABB-(“(.)\1(.)\2”);
根据正则语法进行匹配,匹配到后再进行替换
(str.replaceAll(“\d”,”+”));
将数量词(各种功能性符号)变为了要去匹配的字符
replaceAll(“[*?+{}]”,”-”);
eg:“tomandjack”把tom和jack互换
replaceAll(“(tom)(.*)(jack)”,”$3$2
1
”
)
−
想
在
后
面
表
达
式
拿
前
面
的
捕
获
组
,
将
n
u
m
换
成
1”)-想在后面表达式拿前面的捕获组,将\\num换成
1”)−想在后面表达式拿前面的捕获组,将num换成num(num还是捕获组的编号)
eg:叠字变单字
(“(.)\1+”,”$1”);
思考题:
1.通过replaceAll()实现获取每个字符在字符串中出现的次数
2.把我我我爱爱爱爱学学学学习-变单字
3.字符串,魔晶-aabbbbfffddhlllllljjj,每段字符都是魔法碎片,求出魔晶的平均长度
split()
String[] s=str.split(“\d”); 将其变为切割符(将其变为逗号空格-”, ”)
2个切割符挨在一起时,会切出1个空串(n个挨在一起时,会切出n-1个空串,即n-1个逗号空格”, ”
如1个切割符出现在开头,最开始的那个为逗号空格[, …],多个同上
如切割符出现在末尾,则会被清除
Syso(Arrays.toString(s));