细说String常用方法和正则
一.String常用方法
1.长度length()
2.拼接str.concat(str2)
3.格式化
//方式一
System.out.printf(“大家好,我的名字叫:%s,年芳:%d岁,我有存款:%f %n”,“虫儿飞”,40,2000000.123);
//方式二
String s=String.format(“大家好,我的名字叫:%s,年芳:%d岁,我有存款:%f %n”,“虫儿飞”,40,2000000.123);
System.out.println(s);
(其中%s表示的是字符串,%d表示的是整型,%f表示的是浮点数,%n表示的是换行符)
4.charAt(index)返回指定索引处的字符
5.indexOf(str)返回指定字符串在此字符串中第一次出现处的索引
6.equals()和equalsIgnoreCase()
7.getBytes()使用默认字符集将字符串变为字节数组,IO流中会用到
8.toCharArray()字符串转换为字符数组
9.截取:subString()
10.转换成大小写toLowerCase()toUpperCase()
11.截取前后空白:trim()
12.替换:replace()
13.分割:split
14.正则匹配matches(String reg)返回boolean
以下展示代码
@Test//String 常用方法
public void test1(){
String s="hallo woRlda";
System.out.println(s.charAt(3));
System.out.println(s.indexOf("lo"));
System.out.println(s.indexOf('b'));
System.out.println(s.indexOf('a'));
System.out.println(s.compareTo("hello world"));
System.out.println(s.equals("hAllo worlda"));//false
System.out.println(s.equalsIgnoreCase("hAllo wOrlda"));
System.out.println(Arrays.toString("哈哈".getBytes()));
System.out.println(Arrays.toString(s.toCharArray()));
System.out.println(Arrays.toString("大家好".toCharArray()));
System.out.println(s.substring(2,6));//前闭后开
System.out.println(s.substring(2));
System.out.println(s.toLowerCase());//全部变小写
System.out.println(s.toLowerCase());//全部变大写
System.out.println(" 哈 KK ".trim().length());//截取前后空白
System.out.println(" 哈 KK ".length());//8
System.out.println("长风破浪会有时,直挂云帆济沧海".replace('长','短'));
System.out.println("长风破浪会有时,直挂云帆济沧海".replace("长风","哈哈"));
System.out.println("长风破浪会有时,直挂云帆济沧海".replaceAll("长风","弟弟"));
//寻找已有的字符进行分割,分割符之间的字符作为数组的元素
System.out.println(Arrays.toString("hello-world-haha".split("1")));
}
二.正则
1.何为正则
正则表达式其实就是规则表达式(英文名称是:Regular Expression,所以简写自然是regex)。
作用:用来替换那些符合某个模式(规则)的文本。
2.具体规则
1.任意一个字符表示匹配对应的字符,如a匹配a,7匹配7,-匹配-。
2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中 括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
4. ^ 在中括号里面和外面含义不同,如在外时,就表示开头,如^ 7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如 [ ^abc]表示匹配出去abc之外的其他任一字符。
5. .表示匹配任意的字符。
6. \d表示数字。
7. \D表示非数字。
8. \w表示字母、数字、下划线,[a-zA-Z0-9_]。
9. \W表示不是由字母、数字、下划线组成。
10. [\u4e00-\u9fa5]匹配汉字
11. ?: 表示出现0次或1次。
12. +表示出现1次或多次。
13. *表示出现0次、1次或多次。
14. {n}表示出现n次。
15. {n,m}表示出现n~m次。
16. {n,}表示出现n次或n次以上。
以下展示代码块
@Test//正则
public void test2(){
String s="-ea";
//-放在里面表示区间 放在外面表示本身这个字符。
System.out.println(s.matches("-[abcdefg][a-g]"));//true
String s2="^abx";
System.out.println(s2.matches("^[a][b][x]$"));//表示以a开头x结尾
System.out.println(s2.matches("\\^[a][b][x]"));//表示匹配自己
System.out.println(s2.matches("[^a][a][b][x]"));//表示除了a之外的任意字符都可以
String s3="^hel";
System.out.println(s3.matches("...."));
String s4="123";
System.out.println(s4.matches("123"));
System.out.println(s4.matches("[0-9][0-9][0-9]"));
System.out.println(s4.matches("\\d\\d\\d"));//\\d表示0-9
String s5="abc_123";
System.out.println(s5.matches("abc_123"));
System.out.println(s5.matches("\\w\\w\\w\\w\\w\\w\\w"));
String s6="hkk哈开开";
System.out.println(s6.matches("\\w\\w\\w[\\u4e00-\\u9fa5][\\u4e00-\\u9fa5][\\u4e00-\\u9fa5]"));
String s7="跟我一起唱:come on everybody 666!";
System.out.println(s7.matches("............................"));
String s8="1071461302@qq.com";
System.out.println(s8.matches("\\w+@qq.com"));
}
有一个比较经典的题目案例可以帮助大家熟练正则表达式:
某网站要求注册的账号只能是:数字和字母,不能都是字母,不能都是数字,且要求字母开头,长度在6-12之间。
以下是代码
@Test//案例
public void test1(){
Scanner sc=new Scanner(System.in);
String s="";
while(!s.matches("^[a-zA-Z](?![a-zA-Z]{5,11})[a-zA-Z0-9]{5,11}")){
System.out.println("请输入注册帐号");
s=sc.next();
}
System.out.println("注册成功");
}
感谢evbd!!!