Pattern
.
matches
(
regex,
str)结果完全相同
group():获取刚才查找过的数据
while (m.find()) {System.out.println(m.group());}
A:判断电话号码和邮箱
import java.util.Scanner; /* * 校验邮箱 * * 分析: * A:键盘录入邮箱 * B:定义邮箱的规则 * [email protected] * [email protected] * [email protected] * [email protected] * [email protected] * C:调用功能,判断即可 * D:输出结果 */ public class RegexTest { public static void main(String[] args) { //键盘录入邮箱 Scanner sc = new Scanner(System.in); System.out.println("请输入邮箱:"); String email = sc.nextLine(); //定义邮箱的规则 //String regex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}(\\.[a-zA-Z_0-9]{2,3})+"; String regex = "\\w+@\\w{2,6}(\\.\\w{2,3})+"; //调用功能,判断即可 boolean flag = email.matches(regex); //输出结果 System.out.println("flag:"+flag); } }
B:按照不同的规则分割数据
/* * 分割功能练习 */ public class RegexDemo2 { public static void main(String[] args) { // 定义一个字符串 String s1 = "aa,bb,cc"; // 直接分割 String[] str1Array = s1.split(","); for (int x = 0; x < str1Array.length; x++) { System.out.println(str1Array[x]); } System.out.println("---------------------"); String s2 = "aa.bb.cc"; String[] str2Array = s2.split("\\."); for (int x = 0; x < str2Array.length; x++) { System.out.println(str2Array[x]); } System.out.println("---------------------"); String s3 = "aa bb cc"; String[] str3Array = s3.split(" +"); for (int x = 0; x < str3Array.length; x++) { System.out.println(str3Array[x]); } System.out.println("---------------------"); //硬盘上的路径,我们应该用\\替代\ String s4 = "E:\\JavaSE\\day14\\avi"; String[] str4Array = s4.split("\\\\"); for (int x = 0; x < str4Array.length; x++) { System.out.println(str4Array[x]); } System.out.println("---------------------"); } }
C:把论坛中的数字替换为*
/* * 替换功能 * String类的public String replaceAll(String regex,String replacement) * 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 */ public class RegexDemo { public static void main(String[] args) { // 定义一个字符串 String s = "helloqq12345worldkh622112345678java"; // 我要去除所有的数字,用*给替换掉 // String regex = "\\d+"; // String regex = "\\d"; //String ss = "*"; // 直接把数字干掉 String regex = "\\d+"; String ss = ""; String result = s.replaceAll(regex, ss); System.out.println(result); } }
D:获取字符串中由3个字符组成的单词
import java.util.regex.Matcher; import java.util.regex.Pattern; /* * 获取功能: * 获取下面这个字符串中由三个字符组成的单词 * da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu? */ public class RegexDemo2 { public static void main(String[] args) { // 定义字符串 String s = "da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?"; // 规则 String regex = "\\b\\w{3}\\b"; // 把规则编译成模式对象 Pattern p = Pattern.compile(regex); // 通过模式对象得到匹配器对象 Matcher m = p.matcher(s); // 调用匹配器对象的功能 // 通过find方法就是查找有没有满足条件的子串 // public boolean find() // boolean flag = m.find(); // System.out.println(flag); // // 如何得到值呢? // // public String group() // String ss = m.group(); // System.out.println(ss); // // // 再来一次 // flag = m.find(); // System.out.println(flag); // ss = m.group(); // System.out.println(ss); while (m.find()) { System.out.println(m.group()); } // 注意:一定要先find(),然后才能group() // IllegalStateException: No match found // String ss = m.group(); // System.out.println(ss); } }
A:猜数字小游戏
(int) (Math.random() * 100) + 1)
B:获取任意范围的随机数
import java.util.Scanner; /* * 需求:请设计一个方法,可以实现获取任意范围内的随机数。 * * 分析: * A:键盘录入两个数据。 * int strat; * int end; * B:想办法获取在start到end之间的随机数 * 我写一个功能实现这个效果,得到一个随机数。(int) * C:输出这个随机数 */ public class MathDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入开始数:"); int start = sc.nextInt(); System.out.println("请输入结束数:"); int end = sc.nextInt(); for (int x = 0; x < 100; x++) { // 调用功能 int num = getRandom(start, end); // 输出结果 System.out.println(num); } } /* * 写一个功能 两个明确: 返回值类型:int 参数列表:int start,int end */ public static int getRandom(int start, int end) { // 回想我们讲过的1-100之间的随机数 // int number = (int) (Math.random() * 100) + 1; // int number = (int) (Math.random() * end) + start; // 发现有问题了,怎么办呢? int number = (int) (Math.random() * (end - start + 1)) + start; return number; } }
C:日期和毫秒值的相互转换
*从Date得到一个毫秒值 getTime()
* 把一个毫秒值转换为Date 构造方法setTime(long time)
// 创建对象 Date d = new Date(); // 获取时间 long time = d.getTime(); System.out.println(time); // System.out.println(System.currentTimeMillis()); System.out.println("d:" + d); // 设置时间 d.setTime(1000); System.out.println("d:" + d);
案例:你来到这个世界多少天了?
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; /* * 算一下你来到这个世界多少天? * * 分析: * A:键盘录入你的出生的年月日 * B:把该字符串转换为一个日期 * C:通过该日期得到一个毫秒值 * D:获取当前时间的毫秒值 * E:用D-C得到一个毫秒值 * F:把E的毫秒值转换为年 * /1000/60/60/24 */ public class MyYearOldDemo { public static void main(String[] args) throws ParseException { // 键盘录入你的出生的年月日 Scanner sc = new Scanner(System.in); System.out.println("请输入你的出生年月日:"); String line = sc.nextLine(); // 把该字符串转换为一个日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(line); // 通过该日期得到一个毫秒值 long myTime = d.getTime(); // 获取当前时间的毫秒值 long nowTime = System.currentTimeMillis(); // 用D-C得到一个毫秒值 long time = nowTime - myTime; // 把E的毫秒值转换为年 long day = time / 1000 / 60 / 60 / 24; System.out.println("你来到这个世界:" + day + "天"); } }
A:SimpleDateFormat的构造方法:
SimpleDateFormat():默认模式
SimpleDateFormat(String pattern)给定模式
yyyy-MM-dd HH:mm:ss(一般的模式:年月日时分秒)制作了一个针对日期操作的工具类。
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 这是日期和字符串相互转换的工具类 * * @author 风清扬 */ public class DateUtil { private DateUtil() { } /** * 这个方法的作用就是把日期转成一个字符串 * * @param d * 被转换的日期对象 * @param format * 传递过来的要被转换的格式 * @return 格式化后的字符串 */ public static String dateToString(Date d, String format) { // SimpleDateFormat sdf = new SimpleDateFormat(format); // return sdf.format(d); return new SimpleDateFormat(format).format(d); } /** * 这个方法的作用就是把一个字符串解析成一个日期对象 * * @param s * 被解析的字符串 * @param format * 传递过来的要被转换的格式 * @return 解析后的日期对象 * @throws ParseException */ public static Date stringToDate(String s, String format) throws ParseException { return new SimpleDateFormat(format).parse(s); } } /*===================*/ import java.text.ParseException; import java.util.Date; /* * 工具类的测试 */ public class DateUtilDemo { public static void main(String[] args) throws ParseException { Date d = new Date(); // yyyy-MM-dd HH:mm:ss String s = DateUtil.dateToString(d, "yyyy年MM月dd日 HH:mm:ss"); System.out.println(s); String s2 = DateUtil.dateToString(d, "yyyy年MM月dd日"); System.out.println(s2); String s3 = DateUtil.dateToString(d, "HH:mm:ss"); System.out.println(s3); String str = "2014-10-14"; Date dd = DateUtil.stringToDate(str, "yyyy-MM-dd"); System.out.println(dd); } }
(1)日历类,封装了所有的日历字段值,通过统一的方法根据传入不同的日历字段可以获取值。
Calendar:它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
本质返回的是子类对象
理解
abstract class Person { public static Person getPerson() { return newStudent(); } } class Student extends Person {}
计算任意一年的2月份有多少天?
import java.util.Calendar; import java.util.Scanner; /* * 获取任意一年的二月有多少天 * * 分析: * A:键盘录入任意的年份 * B:设置日历对象的年月日 * 年就是A输入的数据 * 月是2 * 日是1 * C:把时间往前推一天,就是2月的最后一天 * D:获取这一天输出即可 */ public class CalendarTest { public static void main(String[] args) { // 键盘录入任意的年份 Scanner sc = new Scanner(System.in); System.out.println("请输入年份:"); int year = sc.nextInt(); // 设置日历对象的年月日 Calendar c = Calendar.getInstance(); c.set(year, 2, 1); // 其实是这一年的3月1日 // 把时间往前推一天,就是2月的最后一天 c.add(Calendar.DATE, -1); // 获取这一天输出即可 System.out.println(c.get(Calendar.DATE)); } }