一:字符串基本操作
String s1="ac"; //不创建对立对象的新建方式
byte bys[]=new byte[]{'e','y','l'};
String s2=new String(bys,0,bys.length); //通过数组新建对象
System.out.println(s1+s2);
String s1="abcdefghijklm ";
System.out.println(s1.indexOf('c'));//字符串查找
System.out.println(s1.charAt(5)); //指定位置的字符
System.out.println(s1.substring(6));//从指定位置截取
System.out.println(s1.compareToIgnoreCase("o")); //字符串比较
System.out.println(s1.trim()); //字符串去空格
System.out.println(s1.concat("mq")); //字符串连接
String s1="abcdefghijklm ";
System.out.println(s1.replace("e", "ll")); //字符串替换操作
System.out.println(s1.endsWith("l")); //判断结尾
System.out.println(s1.equals("kklslsk")); //判断是否相等
int a=s1.compareTo("ll");
System.out.println(a); //比较字符串的大小,Unicode
System.out.println(s1.toUpperCase());
二:字符串的格式化
Date d1=new Date();
String s1=String.format("%te", d1); //这个月几号?
System.out.println(s1);
String s2=String.format("%tY",d1); //今年是哪一年
System.out.println(s2);
System.out.println(String.format("%tQ", d1)); //绝对毫秒数
三:正则表达式
常用的正则表达式字符
①字符
\\ 反斜线字符
\0n
带有八进制值 0 的字符 n (0 <= n <= 7)
\0nn
带有八进制值 0 的字符 nn (0 <= n <= 7)
\0mnn
带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh
带有十六进制值 0x 的字符 hh
\uhhhh
带有十六进制值 0x 的字符 hhhh
\t
制表符 ('\u0009')
\n
新行(换行)符 ('\u000A')
\r
回车符 ('\u000D')
\f
换页符 ('\u000C')
\a
报警 (bell) 符 ('\u0007')
\e
转义符 ('\u001B')
\cx
对应于 x 的控制符
|
②:字符类 |
[abc]
|
a、b 或 c(简单类) |
[^abc]
|
任何字符,除了 a、b 或 c(否定) |
[a-zA-Z]
|
a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]]
|
a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]]
|
d、e 或 f(交集) |
[a-z&&[^bc]]
|
a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]]
|
a 到 z,而非 m 到 p:[a-lq-z](减去) |
③:POSIX 字符类(仅 US-ASCII)
|
\p{Lower}
|
小写字母字符:[a-z] |
\p{Upper}
|
大写字母字符:[A-Z] |
\p{ASCII}
|
所有 ASCII:[\x00-\x7F] |
\p{Alpha}
|
字母字符:[\p{Lower}\p{Upper}] |
\p{Digit}
|
十进制数字:[0-9] |
\p{Alnum}
|
字母数字字符:[\p{Alpha}\p{Digit}] |
\p{Punct}
|
标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ |
\p{Graph}
|
可见字符:[\p{Alnum}\p{Punct}] |
\p{Print}
|
可打印字符:[\p{Graph}\x20] |
\p{Blank}
|
空格或制表符:[ \t] |
\p{Cntrl}
|
控制字符:[\x00-\x1F\x7F] |
\p{XDigit}
|
十六进制数字:[0-9a-fA-F] |
\p{Space}
|
空白字符:[ \t\n\x0B\f\r] |
④:Greedy 数量词 |
X?
|
X,一次或一次也没有 |
X*
|
X,零次或多次 |
X+
|
X,一次或多次 |
X{n}
|
X,恰好 n 次 |
X{n,}
|
X,至少 n 次 |
X{n,m}
|
X,至少 n 次,但是不超过 m 次 |
⑤:使用方法 正规使用方法
Pattern p=Pattern.compile("\\d+"); Matcher m=p.matcher("33443"); System.out.println( m.matches()); 简写方法
String s2="woshibaokaiaaaa@qq.com"; boolean b1= s2.matches("\\w+@\\w+.[a-z]+"); System.out.println(b1); 应用方法
String str="我是一个喜欢游泳,喜欢:唱歌,喜欢运动.喜欢看书的人"; Pattern p=Pattern.compile("\\p{Punct}"); //使用Pattern类定义一个新的模板 String[] s2=p.split(str); for (String string : s2) { System.out.println(string+"*"); } 举例
1,验证电话号码 010-53517230
Scanner sa=new Scanner(System.in); System.out.println("请输入电话号码"); String ex=sa.nextLine(); if(ex.matches("\\d{3,4}-\\d{7,8}")){ System.out.println("符合"); } else { System.out.println("不符合"); } sa.close();
2,验证手机号码
System.out.println("请输入手机号码"); String phone=sa.nextLine(); boolean flag=phone.matches("1[3-8]\\d{9}"); if (flag){ System.out.println("格式匹配"); }else { System.out.println("格式不匹配"); }
3、验证用户名,只能以字母开头,字母或者下划线的组合
String username=sa.nextLine(); if(username.matches("[a-zA-Z]+[\\w|_]+")){ System.out.println("匹配"); }else{ System.out.println("不匹配"); }
|