字符串操作和正则表达式

时间:2023-01-03 12:25:27

一:字符串基本操作

 

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] ab 或 c(简单类)
[^abc] 任何字符,除了 ab 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p[a-dm-p](并集)
[a-z&&[def]] de 或 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("不匹配");
}