正则表达式(习题)

来源:互联网 发布:国牌lolita淘宝店铺 编辑:程序博客网 时间:2024/06/05 01:08

一、

/*

 * 需求:校验QQ号码
 *(1)要求必须是5-15位数字
 *(2)0不能开头
 *(3)必须都是数字
 *(4)分别用非正则表达式实现、再用正则表达式实现
 */


public class Test_regex {
public static void main(String[] args) {
String QQ = "1333333";
if( ! (QQ.length()< 5 || QQ.length() >15)){
if(! QQ.startsWith("0")){
char[] arr= QQ.toCharArray();
boolean flag = true;
for(int i =0;i< arr.length;i++){
if( arr[i]<'0' || arr[i] >'9'){
flag =false;
break;
}                
}            
if(flag)    
System.out.println("QQ号:"+QQ);
else 
System.out.println("非法QQ号!");
}
else{
System.out.println("QQ号不能以0开头!");
}
}
else {
System.out.println("QQ号超度不符合要求!");
}

//正则表达式
String qq = "123456789012";
String g = "[1-9]\\d{5,11}";
boolean matches = qq.matches(g);
System.out.println(matches);
}

}


二、

/*
 * 需求:有字符串“91 27 46 38 50”,写代码实现最终输出结果“27 38 46 50 91”
 */


/*
 * 分析:
 * 1.将字符串切割成字符串数组
 * 2.将字符串转换成数字,并将其存储在一个等长度的int数组中
 * 3.排序
 * 4.将排序后的数组遍历并拼成一个字符串
 */


public class Test_String {

public static void main(String[] args) {
String s  = "91 27 46 38 50";
//1.将字符串切割成字符串数组
String[] strs = s.split(" ");
//2.将字符串转换成数字,并将其存储在一个等长度的int数组中
int[] arr = new int[strs.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(strs[i]);
}
//3.排序
Arrays.sort(arr);
//4.将排序后的数组遍历并拼成一字符串

//第一种
// String str = "";
// for (int i = 0; i < arr.length; i++) {
// if(i == arr.length -1){
// str += arr[i];
// }else{
// str += arr[i] + " ";
// }
// }
// System.out.println(str);

//第二种(节省空间)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
if(i == arr.length -1){
sb.append(arr[i]);
}else{
// sb.append(arr[i] + " ");
sb.append(arr[i]).append(" ");
}
}
System.out.println(sb);
}

}


三、

/*
 * 习题:
 * 需求:请按照叠词切割“sdqqfgkkkhjppppkl”
 */

String s = "sdqqfgkkkhjppppkl";
String regex = "(.)\\1+";// +代表第一组出现一次到多次
String[] arr = s.split(regex);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}


四、

//习题:
//需求:将字符串“我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程”
//还原成“我要学编程”
String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";
String s2 = s.replaceAll("\\.", "");//把所有的.替换
System.out.println(s2);
//$1表示获取到一组的数据,然后替换掉整租的字符串
String s3 = s2.replaceAll("(.)\\1+", "$1");
System.out.println(s3);


五、

 /*
 * 习题:
 * 字符串获取
 * 需求:把一个字符串中的手机号码获取出来
 */
 
String s = "我的手机号码是13948522128,曾经用过15210964620,还用过15848805048";
String regex = "1[3578]\\d{9}";//手机号码的正则表达式
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
// boolean b = m.find();
//// System.out.println(b);
// String s1 = m.group();
// System.out.println(s1);
while(m.find()){
System.out.println(m.group());
}