day14_API第四天
1、正则(了解)
字符类 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) [0-9] 0到9的字符都包括 [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](减去) |
|
[abc] a、b 或 c(简单类) |
|
[^abc] 任何字符,除了 a、b 或 c(否定) |
|
[a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) |
|
[0-9] 0到9的字符都包括 |
|
[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](减去) |
|
预定义字符类 . 任何字符 \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] //空格,\t:制表符,\n:换行,\x0B:垂直制表符,\f:翻页,\r:回车 \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] |
|
. 任何字符 |
|
\d 数字:[0-9] |
|
\D 非数字: [^0-9] |
|
\s 空白字符:[ \t\n\x0B\f\r] //空格,\t:制表符,\n:换行,\x0B:垂直制表符,\f:翻页,\r:回车 |
|
\S 非空白字符:[^\s] |
|
\w 单词字符:[a-zA-Z_0-9] |
|
\W 非单词字符:[^\w] |
|
Greedy 数量词 X? X,一次或一次也没有 X* X,零次到多次 X+ X,一次到多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 |
|
X? X,一次或一次也没有 |
|
X* X,零次到多次 |
|
X+ X,一次到多次 |
|
X{n} X,恰好 n 次 |
|
X{n,} X,大于等于n次 |
|
X{n,m} X, 大于等于n小于等于m |
|
* A:Pattern和Matcher的概述* B:模式和匹配器的典型调用顺序* 通过JDK提供的API,查看Pattern类的说明* 典型的调用顺序是* Pattern p = Pattern.compile("a*b");* Matcher m = p.matcher("aaaaab");* boolean b = m.matches();
package com.heima.regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo8_Pattern {
public static void main(String[] args) {
//demo1();
//demo2();
demo3();
}
//匹配查找邮箱
private static void demo3() {//[1][\\d&&[012678]][\\d]{9}
String s = "我的邮箱是smhjx2006@163.com,我曾经用过hmsykt2015@sina.com.cn,我还用过hmsykt0902@qq.com";
//String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";//较为精确的匹配。
String regex = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(s);
while(matcher.find()){
System.out.println(matcher.group());
}
}
//匹配查找手机号
private static void demo2() {
String s = "我的手机是18511866260,我曾用过18987654321,还用过18812345678";
String regex = "1[3578]\\d{9}";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
/*boolean b1 = m.find();
System.out.println(b1);
System.out.println(m.group());
boolean b2 = m.find();
System.out.println(b2);
System.out.println(m.group());*/
while(m.find())
System.out.println(m.group());
}
}
package com.heima.test;
import java.util.Arrays;
public class Test1 {
/**
* 分析:
* 1,将字符串切割成字符串数组
* 2,将字符串转换成数字并将其存储在一个等长度的int数组中
* 3,排序
* 4,将排序后的结果遍历并拼接成一个字符串
*/
public static void main(String[] args) {
String s = "91 27 46 38 50";
//1,将字符串切割成字符串数组
String[] sArr = s.split(" ");//如果按照.切割,必须使用\\.转义
//2,将字符串转换成数字并将其存储在一个等长度的int数组中
int[] arr = new int[sArr.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(sArr[i]); //将数字字符串转换成数字
}
//3,排序
Arrays.sort(arr);
//4,将排序后的结果遍历并拼接成一个字符串27 38 46 50 91
/*String str = "";
for (int i = 0; i < arr.length; i++) {
if(i == arr.length - 1) {
str = str + arr[i]; //27 38 46 50 91
}else {
str = str + arr[i] + " "; //27 38 46 50
}
}
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] + " ");
}
}
System.out.println(sb);
}
}
public static void main(String[] args) {
String str= "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程";
//第一步 去掉所有的.
String str1 = str.replaceAll("\\.+", "");
//第二步 叠词去重 \\1+表示第一组(.)中的数据出现1次或多次,翻译过来就是说任意字符出现一次或多次
String str2 = str1.replaceAll("(.)\\1+", "$1");
System.out.println(str2);
}
(.)\\1+:(.) 第一个字符是任意字符,并且我把它放到组里面,方便以后直接调用这个组1+:刚才那个字符出现1次或者多次$1:调用刚才定义的组什么是组???怎么数?组:就是一个括号括起来的东西怎么数从左往右数(
2、Math(看到方法名知道意思即可)
3、System(了解)
4、BigInteger类的概述和方法使用(了解)
* A:BigInteger的概述* 可以让超过Integer范围内的数据进行运算* B:构造方法* public BigInteger(String val)* C:成员方法* public BigInteger add(BigInteger val) //+(加)* public BigInteger subtract(BigInteger val)//-(减)* public BigInteger multiply(BigInteger val)//*(乘)* public BigInteger divide(BigInteger val)// /(除)* public BigInteger[] divideAndRemainder(BigInteger val)案例:
package com.heima.otherclass;
import java.math.BigInteger;
public class Demo4_BigInteger {
public static void main(String[] args) {
//long num = 123456789098765432123L;
//String s = "123456789098765432123";
BigInteger bi1 = new BigInteger("100");
BigInteger bi2 = new BigInteger("2");
System.out.println(bi1.add(bi2)); //+
System.out.println(bi1.subtract(bi2)); //-
System.out.println(bi1.multiply(bi2)); //*
System.out.println(bi1.divide(bi2)); ///(除)
BigInteger[] arr = bi1.divideAndRemainder(bi2); //取除数和余数
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
5、BigDecimal类的概述和方法使用(了解)
package com.heima.otherclass;
import java.math.BigDecimal;
public class Demo5_BigDecimal {
/**
十进制表示1/3
0.3333333333333333333333333333333333333333
*/
public static void main(String[] args) {
//System.out.println(2.0 - 1.1);
/*BigDecimal bd1 = new BigDecimal(2.0); //这种方式在开发中不推荐,因为不够精确
BigDecimal bd2 = new BigDecimal(1.1);
System.out.println(bd1.subtract(bd2));*/
/*BigDecimal bd1 = new BigDecimal("2.0"); //通过构造中传入字符串的方式,开发时推荐
BigDecimal bd2 = new BigDecimal("1.1");
System.out.println(bd1.subtract(bd2));*/
BigDecimal bd1 = BigDecimal.valueOf(2.0); //这种方式在开发中也是推荐的
BigDecimal bd2 = BigDecimal.valueOf(1.1);
System.out.println(bd1.subtract(bd2));
}
}
6、Date类的概述和方法使用(掌握)
A:Date类的概述(是java.util包下的,别导错了)* 类 Date 表示特定的瞬间,精确到毫秒。B:构造方法* public Date()* public Date(long date)C:成员方法* public long getTime()* public void setTime(long time)D:练习1、通过Date日期对象获取毫秒值Date date = new Date();long time = date.getTime();2、通过毫秒值创造Date日期对象long time = 1222L;//毫秒值Date date = new Date(time);
7、SimpleDateFormat类实现日期和字符串的相互转换(掌握)
* A:DateFormat类的概述* DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。是抽象类,所以使用其子类SimpleDateFormat* B:SimpleDateFormat构造方法* public SimpleDateFormat()* public SimpleDateFormat(String pattern)* C:成员方法* public final String format(Date date)* public Date parse(String source)
public static void main(String[] args)throws Exception {
/*
* 把日期对象转换成字符串
*/
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String strDate = format.format(new Date());
System.out.println(strDate);
/*
* 把字符串转换成日期对象
*/
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
Date date = f.parse("2016-04-28 23:19:34:716");
System.out.println(date);
}
*D:算一下你来到这个世界多少天?
package com.heima.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test2 {
/**
* * A:案例演示
* 需求:算一下你来到这个世界多少天?
* 分析:
* 1,将生日字符串和今天字符串存在String类型的变量中
* 2,定义日期格式化对象
* 3,将日期字符串转换成日期对象
* 4,通过日期对象后期时间毫秒值
* 5,将两个时间毫秒值相减除以1000,再除以60,再除以60,再除以24得到天
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
//1,将生日字符串和今天字符串存在String类型的变量中
String birthday = "1983年07月08日";
String today = "2015年9月22日";
//2,定义日期格式化对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
//3,将日期字符串转换成日期对象
Date d1 = sdf.parse(birthday);
Date d2 = sdf.parse(today);
//4,通过日期对象后期时间毫秒值
long time = d2.getTime() - d1.getTime();
//5,将两个时间毫秒值相减除以1000,再除以60,再除以60,再除以24得到天
System.out.println(time / 1000 / 60 / 60 / 24 );
}
}
8、Calendar类的概述和获取日期的方法(掌握)
* A:Calendar类的概述* Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。* B:成员方法* public static Calendar getInstance()* public int get(int field)
* public void add(int field,int amount)* public final void set(int year,int month,int date)3、注意事项
1、get(Calendar.MONTH)的值的范围是0-11,不是1-12//外国人的1是中国的7
//外国人的0-6是中国的周1-5
int week = calendar.get(Calendar.DAY_OF_WEEK)==1?7: calendar.get(Calendar.DAY_OF_WEEK)-1;2、日期处理过程中能使用Calendar就不使用Date
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar c = Calendar.getInstance(); // 父类引用指向子类对象
/*
* get方法测试
*/
System.out.println(c.get(Calendar.YEAR)); // 通过字段获取年
System.out.println(c.get(Calendar.MONTH)); // 通过字段后期月,但是月是从0开始编号的
System.out.println(c.get(Calendar.DAY_OF_MONTH));// 月中的第几天
System.out.println(c.get(Calendar.DAY_OF_WEEK));// 周日是第一天,周六是最后一天
/*
* add方法测试
*/
c.add(Calendar.MONTH, -1); // 对指定的字段进行向前减或向后加
printTime(c);
/*
* set方法测试
*/
c.set(Calendar.YEAR, 2000); // 修改指定字段
c.set(2000, 7, 8);
printTime(c);
}
/**
* 打印年月日 星期
* @param c
*/
public static void printTime(Calendar c) {
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONDAY)+1;
int day = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK)==1?7: c.get(Calendar.DAY_OF_WEEK)-1;
System.out.println(year+"年"+month+"月"+day+"日星期"+week);
}
}
package com.heima.test;
import java.util.Calendar;
import java.util.Scanner;
public class Test3 {
/**
* * A:案例演示
* 需求:键盘录入任意一个年份,判断该年是闰年还是平年
* Calendar c = Calendar.getInstance();
*
* 分析:
* 1,键盘录入年Scanner
* 2,创建Calendar c = Calendar.getInstance();
* 3,通过set方法设置为那一年的3月1日
* 4,将日向前减去1
* 5,判断日是多少天,如果是29天返回true否则返回false
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年份,判断该年份是闰年还是平年:");
//int year = sc.nextInt();
String line = sc.nextLine(); //录入数字字符串
int year = Integer.parseInt(line); //将数字字符串转换成数字
boolean b = getYear(year); //这里输入的是年份
System.out.println(b);
}
private static boolean getYear(int year) {
//2,创建Calendar c = Calendar.getInstance();
Calendar c = Calendar.getInstance();
//设置为那一年的3月1日
c.set(year, 2, 1);
//将日向前减去1
c.add(Calendar.DAY_OF_MONTH, -1);
//判断是否是29天
return c.get(Calendar.DAY_OF_MONTH) == 29;
}
}
8、今天必须掌握的内容。以及常见的笔试题和面试题(学完这个就可以放心学习后面的知识了)
package com.heima.stringStringBuilderStringBuffer;
/**
* 写一个正则表达式,可以匹配尾号5连的手机号。
* 规则: 第1位是1,第二位可以是数字3458其中之一,后面6位任意数字,最后5位为任意相同的数字。
* 例如:18601088888、13912366666
* @author JX
*
*/
public class Test3 {
public static void main(String[] args) {
String regex = "[1][3458]\\d{4}(\\d)\\1{4}";
String phone1 = "18601088888";
String phone2 = "13912366666";
System.out.println(phone1.matches(regex));
System.out.println(phone2.matches(regex));
}
}
/**
* 8、模拟用户注册 1、用户录入手机号 2、校验用户录入的手机号,1、长度是否11位,2、是否全是数字
* 3、将手机号后四位截取出来通过Random类加密,将加密后的数字作为校验码打印在控制台
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号");
String phone = sc.nextLine();
//校验成功
if(phone.length()==11 && phone.matches("[0-9]{11,}")){
String num = phone.substring(7);//后四位
Random r = new Random(Long.parseLong(num));
int yzm = r.nextInt(100000);//验证码
System.out.println("验证码是:"+yzm);
}else{
System.out.println("请输入正确的手机号");
}
}
public class Test {
public static void main(String[] args) {
System.out.println("7777777".matches(".*(\\d)\\1{6}"));
}
}
day14_API第四天的更多相关文章
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 如何一步一步用DDD设计一个电商网站(四)—— 把商品卖给用户
阅读目录 前言 怎么卖 领域服务的使用 回到现实 结语 一.前言 上篇中我们讲述了“把商品卖给用户”中的商品和用户的初步设计.现在把剩余的“卖”这个动作给做了.这里提醒一下,正常情况下,我们的每一步业 ...
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- “四核”驱动的“三维”导航 -- 淘宝新UI(需求分析篇)
前言 孔子说:"软件是对客观世界的抽象". 首先声明,这里的"三维导航"和地图没一毛钱关系,"四核驱动"和硬件也没关系,而是为了复杂的应用而 ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- HTML 事件(四) 模拟事件操作
本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4. ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
随机推荐
- [issue] dyld`dyld_fatal_error: -> 0x120015088 <+0>: brk #0x3
iOS "dyld`dyld_fatal_error: -> 0x12000d088 <+0>: brk #0x3"错误 根据上面的博客里的方法二 尝试解决方法二 ...
- django admin下拉列表不显示值,显示为object的处理
问题:模板中创建form表单中的下拉列表, 前台打开页面显示object,而不是值,如图: 尝试了多种办法无果,最后解决了,处理办法是修改models.py,原来的model: class Techn ...
- JDBC连接sql server数据库及其它
JDBC连接sql server数据库的步骤如下: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的 ...
- 20161026__Oracle10g_DataGuard
1. orcl.__db_cache_size=180355072 orcl.__java_pool_size=4194304 orcl.__large_pool_size=4194304 orcl. ...
- java中获取ServletContext常见方法
http://blog.sina.com.cn/s/blog_3fe961ae0100wjnf.html 1.在javax.servlet.Filter中直接获取 ServletContext con ...
- ocLazyLoad angular 按需加载
ionic 框架 1.引用 index.html 加载 <script type="text/javascript" src="lib/oclazyload/ocL ...
- office openxml学习(一)
以前用过,aspose.dll处理word ,excel,之后发现 npoi,使用了一段时间,总觉得是第三方,不明白底层的实现,直到最近发现了office openxml ,其实这个技术,很久以前就有 ...
- C#中文和UNICODE编码转换
C#中文和UNICODE编码转换 //中文轉為UNICODE string str = "中文"; string outStr = ""; if (!strin ...
- gz
不准备的话,是真的会滚粗的. leetcode 还是重新做起来叭. 那么就开始咯 8.22 leetcode 144 Binary Tree Preorder Traversal 二叉树的前序遍历 ...
- jQuery:常用方法一览
Attribute:$(”p”).addClass(css中定义的样式类型); 给某个元素添加样式$(”img”).attr({src:”test.jpg”,alt:”test Image”}); 给 ...