字符串和正则表达式
-
字符串常量直接指向常量池的首地址,字符串变量是指向堆空间,堆空间指向常量池。
//常量池 String str1="str"; //常量池 String str2="ing"; //常量池 String str3="str"+"ing"; System.out.println(str3); //在堆中创建新对象 String str4=str1+str2; System.out.println(); //equals():内容是否相等,首先看地址是否相等,在看内容是否相等 System.out.println(str4.equals(str3));
字符串比较相等
-
==在比较字符串对象的时候用来比较什么?---地址比较
-
equals():内容是否相等,通过源代码分析,首先比较的是地址是否相等,如果相等就是true,如果地址不相等,就一个字符一个字符的进行比较。看是否相等,它是重写了Object对象的equals()方法,Object中的equals()比较的是地址。
//常量池 String str1="str"; //常量池 String str2="ing"; //常量池 String str3="str"+"ing"; System.out.println(str3); //在堆中创建新对象 String str4=str1+str2; System.out.println(); //equals():内容是否相等,首先看地址是否相等,在看内容是否相等 System.out.println(str4.equals(str3));
字符串对象的方法
-
比较字符串是否相等
String s3="hello"; String s4=new String("hello"); System.out.println(s3.equals(s4)); String s5="Hello"; //equalsIgnoreCase()比较字符串内容是否相等,忽略大小写 System.out.println(s3.equalsIgnoreCase(s5)); //startsWith判断字符串对象否以指定的str开头 String filename="abc_f.txt"; System.out.println(filename.startsWith("1abc"));//false //endsWith判断字符串对象否以指定的str结尾 System.out.println(filename.endsWith("txt"));
-
获取字符串长度
String leng="abcdef"; //获取字符串长度 System.out.println(leng.length()); //获得指定字符串索引处的字符 char c=leng.charAt(1); System.out.println(c); //indexOf(String str):获取str在字符串对象中第一次出现的索引 int index=leng.indexOf("abc"); System.out.println(index); //把字符串转换位字符数组 char[] chars=leng.toCharArray(); for (int i = 0; i < chars.length; i++) { System.out.print(chars[i]+" "); }
-
获取指定字符串中,大写字母、小写字母、数字的个数。
String s="12EaFCJD456affffcfe"; //1.将字符串转成字符数组 char[] chars1=s.toCharArray(); int m=0; int n=0; int k=0; for (char c1 : chars1) { if (c1>='a'&&c1<='z'){ m++; } if (c1>='A'&&c1<='Z'){ n++; } if (c1>='0'&&c1<='9'){ k++; } } System.out.println("小写字母"+m+"\t"+"大写字母"+n+ "\t"+"数字"+k);
StringBuffer和StringBuilder
-
StringBuffer的相关方法
-
append(),追加道字符串的末位
-
insert():插入到指定位置
-
delete():删除字符串
-
reverse():反转
StringBuilder stringBuilder=new StringBuilder("abc"); // 1. append(),追加道字符串的末位 stringBuilder.append("def").append("lyh").append("hello"); System.out.println(stringBuilder.toString()); // 2. insert():插入到指定位置 stringBuilder.insert(1,"zz"); System.out.println(stringBuilder.toString()); // 3. delete():删除字符串 stringBuilder.delete(1,3); System.out.println(stringBuilder.toString()); // 4. reverse():反转 stringBuilder.reverse(); System.out.println(stringBuilder.toString());
-
-
需求:判断一个字符串是否是手机字符串 "13533839778"
-
手机号的规则:
-
手机号的长度必须是11位
-
手机号的第一位必须是1
-
手机号的第二位:3或4或5或7或8
-
手机号的剩余九位的每一位都必须是数字
//1.定义字符串存储手机号 String phone="18567799046"; //2.定义一个正则表达式 String reg="1[34578]\\d{9}"; //3.利用字符串函数进行匹配 boolean matches = phone.matches(reg); System.out.println(matches);
-
-
将字符串“abcpof67kkk12kkk5sss”中的数字变成汉字“我们”
//1.定义一个等待检查的字符串 String s="ssdasff22554daaf45afa1a5"; //2.定义一个正则表达式 String regs="\\d"; //3.用字符串的代替方式 String s1 = s.replaceAll(regs, "我们"); //4.输出结构 System.out.println(s1);
-
注册的时候要求用户输入邮箱,规则是:
1)字母开头,中间可以是字母数字下划线或$.
2)接着是@
3)是字母长度不超过10位
4).和字母长度不超过3位
5)后面还可以接一个.字母,长度不能超过3位
编码验证改邮箱
String email="yy_y$_222y@sina.com.cn"; String rages="[a-zA-Z][\\w_$]{5,}{1,10}(\\.[a-zA-Z]{2,3}{1,2})"; boolean matches1 = email.matches(rages); System.out.println(matches1);
-
总结
-
String 是不可变的,StringBuffer、StringBuilder 是可变的;
-
String 、StringBuffer 是线程安全的,StringBuilder 不是线程安全的。
-
StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类
-
StringBuffer:效率高;StringBuilder:安全性高
-