正则表达式
正则表达式可以用一些规则的字符来制定规则,并用来校验数据格式的合法性(判断格式 )
用正则表达式完成如下需求
- 请编写程序模拟用户输入手机号码、验证格式正确,并给出提示,知道格式输入正确为止
- 请编写程序模拟用户输入邮箱号码、验证格式正确,并给出提示,知道格式输入正确为止
- 请编写程序模拟用户输入电话号码、验证格式正确,并给出提示,知道格式输入正确为止
public class RegexTest3 {
//目标:校验 手机号码 邮箱 电话号码
public static void main(String[] args) {
checkPhone();
checkEmail();
checkTel();
}
private static void checkTel() {
Scanner sc=new Scanner(System.in);
while (true) {
System.out.println("请输入您的电话号码");
String phone=sc.next();
if(phone.matches("0\\{2,6}-?\\d{5,20}")){
System.out.println("电话格式正确,注册完成!");
break;
}else{
System.out.println("格式有误");
}
}
}
public static void checkPhone(){
Scanner sc=new Scanner(System.in);
while (true) {
System.out.println("请输入您的手机号码");
String phone=sc.next();
if(phone.matches("1[3-9]\\d{9}")){
System.out.println("手机格式正确,注册完成!");
break;
}else{
System.out.println("格式有误");
}
}
}
public static void checkEmail(){
Scanner sc=new Scanner(System.in);
while (true) {
System.out.println("请输入您的注册邮箱");
String phone=sc.next();
if(phone.matches("\\w{1,30}@[a-zA-Z0-9]{2,20}\\.([a-zA-Z0-9]{2,10}){1,2}")){
System.out.println("邮箱格式正确,注册完成!");
break;
}else{
System.out.println("格式有误");
}
}
}
}
分割字符串
public class RegexTest3 {
//目标:分割字符串,用数组来存储
public static void main(String[] args) {
String names="小路adhaks33蓉儿dasdj89姐姐";
String[] arrs=names.split("w+");
for(int i=0;i< arrs.length;i++){
System.out.println(arrs[i]);
}
String name2=names.replaceAll("\\w+"," ");
System.out.println(name2);
}
}
正则表达式爬取信息
public class RegexTest3 {
public static void main(String[] args) {
String rs="自律起来学习java,电话020-43422424,或者联系邮箱"+
"itcast@itcast.cn,电话18762832633,020322323"+
"邮箱bozai@itcast.cn.400-100-233,4001003232";
//去求:从上面的内容爬取出电话号码和邮箱
//1.定义爬取规则
String regex="(\\w{1,30}@[a-zA-Z0-9]{2,20}(\\.[a-zA-Z0-9]{2,20}){1,2})|(1[3-9]\\d{9})" +
"|(0\\d{2,6}-?\\d{5,20})|(400-?\\d{3,9}-?\\d{3,9})";
//2,把这个爬取规则编译成匹配对象
Pattern pattern=Pattern.compile(regex);
//3.得到一个内容匹配其对象
Matcher matcher=pattern.matcher(rs);
//4.开始找了
while (matcher.find()){
String rs1=matcher.group();
System.out.println(rs1);
}
}
}
Arrays类概述
数组操作工具类,专门用于操作数组元素的
数组的常见操作
public class ArraysDemo01 {
public static void main(String[] args) {
int[] arr={10,2,55,23,24,100};
System.out.println(arr);
//1.返回数组内容的tostring(数组)
String rs= Arrays.toString(arr);
System.out.println(rs);
System.out.println(Arrays.toString(arr));
//2.排序的API(默认自动对数组元素进行升序排序)
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//3.二分搜索技术(前提必须排好序才支持,否则出bug )
int index1=Arrays.binarySearch(arr,55);
System.out.println(index1);
int index2=Arrays.binarySearch(arr,3);
System.out.println(index2);//-2
//返回不存在的元素的规律:-(应该插入的位置索引+1)
int index3=Arrays.binarySearch(arr,22);
//需求:降序排序!(自定义比较器对象,只能支持引用类型的排序!!
Integer[] ages1={34,12,42,23};
}
}
常见算法
选择排序
- 每轮选择当前位置,开始找出后面的较小值与该位置交换(每次交换可以至少确定一个位置)
选择排序的关键 - 确定总共需要选择几轮:数组的长度-1
- 控制每轮从一千的位置为基准,与后面元素选择几次
public class Test {
public static void main(String[] args) {
//1.定义数组
int[] arr={5,1,3,2,6};
//排序次数 数组长度-1
for(int i=0;i<arr.length-1;i++){
boolean flag=false;
//数组遍历
for(int j=i+1;j<arr.length;j++){
//交换
//如果有比当前位数据更小的,则交换
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
flag=true;
}
}
if(flag==false)
break;
System.out.println("第"+(i+1)+"轮:"+ Arrays.toString(arr));
}
}
}
二分查找
为什么要二分查找:应为再数据量特别大的时候,基本查找从前往后寻找的性能是很差的
二分查找的性能号,二分查找的前提是必须要排号数据
二分朝朝正常的检索条件应该是开始位置min<=结束位置max
public class Test {
public static void main(String[] args) {
//1.定义数组
int[] arr={10,14,16,25,28,30,35,88,100};
binarySearch(arr,35);
}
/**
* 二分查找算法的实现
* @param arr 排序数组
* @param data 要找的数据
* @return 索引如果元素不存在,直接返回-1
*/
private static int binarySearch(int[] arr,int data) {
//1.定义左边位置和右边为hi
int left = 0;
int right = arr.length - 1;
//2.开始循环,折半查询
while (left <= right) {
//取中间索引
int middleIndex = (left + right) / 2;
//3.判断当前中间位置的元素要和要找的元素的大小情况
if (data > arr[middleIndex]) {
//往右边找,左边位置更新位=中间索引+1
left = middleIndex + 1;
} else if (data < arr[middleIndex]) {
//往左边找,左边位置=中间索引-1
right = middleIndex - 1;
} else {
return middleIndex;
}
}
return -1;
}
}