Random、Date、BigDecimal、Calender、Math类、模式器、匹配器

    技术2022-07-10  105

    1 Random类

    package Random类; import java.util.Random; public class Test { public static void main(String[] args) { // Random() 创建一个新得随机数生成器 Random random = new Random(); // nextInt() // 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 for (int i = 0; i < 10; i++) { int i1 = random.nextInt();//无参的这个方法表示生成int范围内的随机数 System.out.println(i1); int i2 = random.nextInt(100);//有参的方法表示从100的范围内最大的生成随机数,其范围为0-99 System.out.println(i2); } for (int i = 0; i < 100; i++) { double v = random.nextDouble();//生成随机小数0-1范围内 System.out.println(v); } for (int i = 0; i < 20; i++) { boolean b = random.nextBoolean(); System.out.println(b); } } } package Random类; import java.util.Arrays; import java.util.Random; public class Test1 { public static void main(String[] args) { // nextBytes(byte[] bytes) // 生成随机字节并将其置于用户提供的 byte 数组中。 byte[] bytes=new byte[10]; Random random = new Random(); random.nextBytes(bytes);//这一步把数组放进去之后,就直接填充了数据了 for (int i = 0; i < 10; i++) { System.out.println(bytes[i]); } System.out.println(Arrays.toString(bytes));//Arrays.toString可以将数组直接变成String字符串的形式,一定要记住啊! String sss=new String(bytes);//此表示的是将byte中的数字按照ASKII码表转换成String类型的对应字符串,两者要区分 String s=new String("booleann"); System.out.println(s); // Arrays中有copyof,equals,sort,toString方法,其中sort和toString这个方法很重要,sort中有个比较器,采用匿名内部类的方式 } } package Random类; import java.util.Random; public class Test2 { public static void main(String[] args) { // Random() // 创建一个新的随机数生成器。 //Random(long seed) // 使用单个 long 种子创建一个新的随机数生成器。 Random random = new Random();//括号里面就是种子,其实就是有无参数,无参就是没种子,代表每次生成随机数不一样 for (int i = 0; i < 5; i++) { int i1 = random.nextInt(10); System.out.println(i1); } System.out.println("==============================="); Random random1 = new Random(10L);//括号里面有种子了,就会根据种子去算一个固定的随机数,每次的生成的都是一样的 for (int i = 0; i < 5; i++) { int i1 = random1.nextInt(10); System.out.println(i1); } } }

    2 Date日期类

    import java.util.Date; public class Trst1 { public static void main(String[] args) { // Date日期类,能精确到毫秒 // 月份由从0至11的整数表示,0为1月,1为2月,以此类推。 // 日期由1到31来表示 Date date = new Date(); System.out.println(date);//重写了toString,按照西方的格式输出日期 // Date(long date) // 分配 Date 对象并初始化此对象, // 以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。 System.out.println("========================"); Date date1 = new Date(1000 * 60 * 60);//此表示给计算机元年增加相应的毫秒值,只要里面有参就表示为从计算机元年开始 System.out.println(date1); } } package 日期类; import java.util.Date; @Deprecated public class Test2 { public static void main(String[] args) { Date date = new Date(); long time = date.getTime(); System.out.println(time);//获取1979年1月1日到现在的毫秒值 // 或者用Systyem自带的方法也可以 long l = System.currentTimeMillis(); System.out.println(l); System.out.println("==========================================="); Date date1 = new Date(); date1.setTime(1000 * 60 * 60 * 24);//在这相当于给元年的日期加了一天(里面的方法肯定是用date1这个引用了,不然 //调用完这个方法之后,date1里面的数据不会改变 ) // 这里其实跟有参构造一样 new Date(1000 * 60 * 60 * 24); System.out.println(date1); // 注意:如果想标注一个类或者一个方法过时的话,可以用@Deprecated标注,标注过后的类或方法就会中间有一条横线 } } package 日期类; import java.util.Date; public class Test4 { public static void main(String[] args) { // Date 到Long的转换 // Date到Long类型转换 Date date = new Date(); long time = date.getTime(); // long到Date的转换 Date date1 = new Date(1000 * 60);//(1)方式1,有参里面的形参为long类型 Date date2 = new Date(); date2.setTime(1000*60);//与1的形参一样 System.out.println(date2);//(2)方式2 } } package 日期类; import java.text.SimpleDateFormat; import java.util.Date; public class Test5 { public static void main(String[] args) { Date date = new Date(); System.out.println(date); // 默认的日期展示格式咱们看着不习惯 // 下面变换成咱们习惯的方式 // 通过日期类格式化,把日期变成我们想要的式子 // 用下面这个类: // 使用空参构造,按照默认格式来格式化: SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); // 日期格式化:一定记住 String format = simpleDateFormat.format(date); System.out.println(format); System.out.println("========================="); // 按照我们指定的格式来格式化日期: SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String format1 = simpleDateFormat1.format(date); System.out.println(format1); //字母 日期或时间元素 表示 示例 //G Era 标志符 Text AD //y 年 Year 1996; 96 //M 年中的月份 Month July; Jul; 07 //w 年中的周数 Number 27 //W 月份中的周数 Number 2 //D 年中的天数 Number 189 //d 月份中的天数 Number 10 //F 月份中的星期 Number 2 //E 星期中的天数 Text Tuesday; Tue //a Am/pm 标记 Text PM //H 一天中的小时数(0-23) Number 0 //k 一天中的小时数(1-24) Number 24 //K am/pm 中的小时数(0-11) Number 0 //h am/pm 中的小时数(1-12) Number 12 //m 小时中的分钟数 Number 30 //s 分钟中的秒数 Number 55 //S 毫秒数 Number 978 //z 时区 General time zone Pacific Standard Time; PST; GMT-08:00 //Z 时区 RFC 822 time zone -0800 // 其中字母是固定的,必须这样写,但是拼接符可以自己定义 // 如: yyyy-MM-dd HH:mm:ss 可写成yyyy年MM月dd日 HH:mm:ss,自己定义好就可以 Date date1 = new Date(); SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss 星期F"); String format2 = simpleDateFormat2.format(date1); System.out.println(format2); } } package 日期类; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test6 { public static void main(String[] args) throws ParseException { // 把一个日期字符串,格式化成一个日期对象。 String---》 Date // 日期字符串 String s="2020-06-25 16:21:32"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //这里一定要与上面的s里面的字符串对应一致,一定要对应一致,一定要对应一致!!!! // 把日期字符串解析成日期对象 Date parse = simpleDateFormat.parse(s); System.out.println(parse); } }

    3 Calendar日期类

    package 日期类; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test6 { public static void main(String[] args) throws ParseException { // 把一个日期字符串,格式化成一个日期对象。 String---》 Date // 日期字符串 String s="2020-06-25 16:21:32"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //这里一定要与上面的s里面的字符串对应一致,一定要对应一致,一定要对应一致!!!! // 把日期字符串解析成日期对象 Date parse = simpleDateFormat.parse(s); System.out.println(parse); } } package Calendar日期类; import java.util.Calendar; import java.util.Scanner; public class MyTest2 { public static void main(String[] args) { // 或者去用Calendar的日期类对象去获取今年的2月份有多少天 Scanner scanner = new Scanner(System.in); System.out.println("请输入年份"); int i = scanner.nextInt(); Calendar instance = Calendar.getInstance(); // instance.set(Calendar.YEAR,i); // instance.set(Calendar.MONTH,2); // instance.set(Calendar.DAY_OF_MONTH,1); // 上面这样写太麻烦了,可以直接一步设置 instance.set(i,3,1);//这里就是一步设置了,可以把年月日时分秒全部设置出来,也可以设置其中一部分 instance.add(Calendar.DAY_OF_MONTH, -1); System.out.println(i+"年的2月份有"+instance.get(Calendar.DAY_OF_MONTH)+"天"); } } package Calendar日期类; import java.util.Calendar; //Calendar类就是用来替代Date中过时的方法,这里讲的是获取日期的方法 public class Test { public static void main(String[] args) { // Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 // 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。 // 其是抽象类,通过new对象无法直接调这个类,但是这个类里面有静态方法,可以通过其内的静态方法去调用这个类 Calendar instance = Calendar.getInstance(); // Calendar.getInstance();调用的最后是其子类,这里还是用的多态 System.out.println(instance); int i = instance.get(Calendar.YEAR);//用来获取年份 int i1 = instance.get(Calendar.MONTH);//月,括号里面可以写数字,但是这样不好 int i2 = instance.get(Calendar.DAY_OF_MONTH);//日 int i3 = instance.get(Calendar.HOUR);//时(12小时制) int i4 = instance.get(Calendar.HOUR_OF_DAY);//时(24时制)//一般用这个 int i5 = instance.get(Calendar.MINUTE);//分 int i6 = instance.get(Calendar.SECOND);//秒 } } package Calendar日期类; import java.util.Calendar; import static java.util.Calendar.*; public class Test2 { public static void main(String[] args) { // 这里讲的是设置日期的方法 Calendar instance = Calendar.getInstance(); instance.set(Calendar.YEAR, 2000);//将年份设置为2000年 int i = instance.get(Calendar.YEAR);//这里获取到的就是2000年了 System.out.println(i); System.out.println("===================="); // 一次性设完 instance.set(1998,01,01,13,25,11);//注意,这里的月份 // 范围是0-11的,也就是说01表示的是2月了,set,get都是这个意思 System.out.println(instance.get(Calendar.MONTH)); } } package Calendar日期类; import java.util.Calendar; public class Test3 { public static void main(String[] args) { // 给某个日期对象加上或减去相应的日期 Calendar instance = Calendar.getInstance(); instance.add(Calendar.MONTH,2);//给现在对应的月份加上两个月 instance.add(Calendar.YEAR,10);//给现在对应的年份加上10年,以此类推 // 注意:这里没有对应的减的方法,所以只能amount为负数的时候,对应的为减法 instance.add(Calendar.DAY_OF_MONTH,-10);//对应当前日期减五天,而且其会计算减5天后对应月份的日期, // 比如 这个月为4月1号,我减10,那么他就会对应计算减10之后的上一个月的日期号,为22 System.out.println(instance.get(Calendar.DAY_OF_MONTH)); } }

    4 BigDecimal 类

    package BigDecimal类; import java.math.BigDecimal; public class Test { public static void main(String[] args) { double a=2.12424214; double b=3.41241241421241; System.out.println(a*b);//这样算精度达不到很高 // 如果对精度很高,double类型就不能满足了 // JAVA给我们提供了相应的类来满足精度要求 BigDecimal bigDecimal = new BigDecimal("2.12424214"); BigDecimal bigDecimal1 = new BigDecimal("3.41241241421241");//注意里面是字符串类型就行了 BigDecimal multiply = bigDecimal.multiply(bigDecimal1); System.out.println(multiply);//乘 BigDecimal add = bigDecimal.add(bigDecimal1); System.out.println(add);//加 BigDecimal subtract = bigDecimal.subtract(bigDecimal1); System.out.println(subtract);//减 BigDecimal divide = bigDecimal.divide(bigDecimal1,20,BigDecimal.ROUND_CEILING); System.out.println(divide);//除法 (1)不能整除的情况 // 需声明小数点后面需保留多少位,以及取舍模式,如上所示,取舍模式可以查看文档 BigDecimal bigDecimal2 = new BigDecimal("10"); BigDecimal bigDecimal3 = new BigDecimal("2"); BigDecimal divide1 = bigDecimal2.divide(bigDecimal3); System.out.println(divide1);//(2)可以整除的情况下,没有什么多说的 } } package BigDecimal类; import java.math.BigInteger; // BigInteger也是对高精度要求所提出来的类 public class Test1 { public static void main(String[] args) { // 注意:打断点的话一般都是在第一行打断点 long maxValue = Long.MAX_VALUE;//这是个包装类,获取了其long类型的最大值 BigInteger bigInteger = new BigInteger(maxValue + "");//形参表示为字符串类型 BigInteger bigInteger1 = new BigInteger("22"); System.out.println(bigInteger.add(bigInteger1));//跟BigDecimal类的方法一样,且形参都为字符串类型 // 当然也可以选多个断点,按F9可以从上一个断点调到下一个断点,或者点类似播放键的那个就可以到下一个断点,想从这个断点出来的 // 的话就点类似窗口关闭的那个按钮,就出来了,播放的那个按钮可以和窗口关闭的那个按钮可以交替使用 // 类似窗口关闭的那个按钮是从当前断点出去,但是出去的时候依旧回到的是之前执行到的那个语句,如果按向上的箭头的话 // JAVA就认为这个语句你已经看完了,直接跳到了下一个执行语句上了就 // 利用Alt+F8或者类似计算器的东西可以自己设置计算表达式,就是你可以设置从哪个数开始看(例如循环的时候),就不用从头开始看了 // Alt+F9 或者计算表达式旁边那个就是可以直接一步到光标点到的位置进行debug,但是每一步只能用一次,除非你跳出去在进来可以在用一次 } }

    5 模式器、匹配器

    package Pattern模式器和Matcher匹配器; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { public static void main(String[] args) { // Pattern模式器就是封装一个正则表达式 // 即正则表达式的编译形式 // 如: Pattern p=Pattern.compile("a*b"); // 通过模式器封装一个正则表达式 // 通过模式器获得一个匹配器Matcher,并把待匹配的字符串传入,如: Matcher m=p.matcher("aaaab"); // 调用匹配器中的匹配方法进行匹配,如: boolean a=m.matches(); System.out.println(a); // 如果只是用匹配功能这个要求,不需要用这两个类中这么复杂的方法,只需要用以前的正则表达式匹配的就可以,但这两个类中远不 // 止这两个方法。 } } package Pattern模式器和Matcher匹配器; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test2 { 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 s1 = s.replaceAll("\\,|\\?+", " "); System.out.println(s1); String[] split = s1.split("\\s+"); for (int i = 0; i < split.length; i++) { if (split[i].length()==3){ System.out.println(split[i]); } } System.out.println("===================================================="); //pattern 与matcher方法: // 1.我们定义一个正则表达式 String regx="\\b[a-z]{3}\\b";//这个时候要注意,要加上单词边界,不然他就把空格也算上了 // 2.把正则表达式封装到模式器中 Pattern compile = Pattern.compile(regx); // 3.通过模式器,获取匹配器 Matcher matcher = compile.matcher(s); // boolean find() // 尝试查找与该模式匹配的输入序列的下一个子序列 // String group() // 返回由以前匹配操作所匹配的输入子序列 // 上述两个方发是先找有没有,才去在截,有才调用group,没有就不调用 // 4.先用查找的方法,再去匹配 // boolean bb=matcher.find(); while (matcher.find()){ String group = matcher.group(); System.out.println(group);//这个功能只能一次找一个,所以得用循环才能全部找完 } } }

    6 Math 类

    package Math类; public class Test { public static void main(String[] args) { // Math类包含了用于执行基本数学得方法,如初等指数,对数,平方和三角函数等 double pi=Math.PI; double e=Math.E; System.out.println(e); System.out.println(pi); System.out.println(Math.abs(-1));//获取绝对值 System.out.println(Math.max(10,20));//获取两个数的最大值 System.out.println(Math.max(Math.max(100,200),300));//获取三个数得最大值,依此类推 System.out.println(Math.min(100,200));//最小值 System.out.println(Math.min(Math.min(100,200),300));//三个数得最小值 System.out.println(Math.ceil(3.14));//向上取整,变成了4.0了, System.out.println(Math.floor(3.14));//向下取整,变成了3.0 System.out.println(Math.round(3.1222222222));//四舍五入,这个只取整数类型,为3 System.out.println(Math.round(3.999999999));//4 它只看3得后一位小数,剩下的不看 System.out.println(Math.sqrt(4));//对4取平方根 2,只取正得,且为小数形式,最终为2.0 System.out.println(Math.pow(2, 16));//取次方,这个为2得16次方,也为小数形式,为65536.0 System.out.println(Math.pow(8, 1 / 3.0));//对8取立方根(注意这里要用小数,几次方如果为分数得时候必须要用小数,整数次方不用) } }
    Processed: 0.020, SQL: 9