随机数类
package leetcode;
import java.util.Random;
public class Main {
// 测试代码
public static void main(String[] args)
{
//第一种办法,采用Random类随机生成在int范围内的随机数
Random rd = new Random();
System.out.println(rd.nextInt());
//0到100的随机数
System.out.println(rd.nextInt(100));
//double 0-1内的浮点数
System.out.println(rd.nextDouble());
//第二种,生成一个范围内的随机数 例如0到10之间的随机数
//Math.random[0,1)
System.out.println(Math.round(Math.random()*10));
//JDK 8新增的方法
rd.ints();//返回无限个int类型范围内的数据
//生成10个int 范围内的个数
int[] arr = rd.ints(10).toArray();
for(int i = 0;i<arr.length ;i++ ) {
System.out.println(arr[i]);
System.out.println(rd.nextInt());
}
System.out.println();
//产生五个 10到100 的值并且存到数组中
arr= rd.ints(5,10,100).toArray();
for(int i = 0 ;i<arr.length;i++) {
System.out.println(arr[i]);
}
System.out.println();
//产生10个int类型的随机数 但是限制为五个 所以只有五个有效
arr=rd.ints(10).limit(5).toArray();
for(int i =0 ;i<arr.length;i++) {
System.out.println(arr[i]);
}
}
}
大数类
import java.math.BigDecimal;
import java.math.BigInteger;
public class Main {
// 测试代码
public static void main(String[] args)
{
//声明BigDecimal对象
BigDecimal b1 = new BigDecimal("123456789.987654321");
BigDecimal b2 = new BigDecimal(987654321.123456789);
System.out.println("b1"+b1+",b2"+"b2");
System.out.println("加法操作"+b2.add(b1));
System.out.println("减法操作"+b2.subtract(b1));
System.out.println("乘法操作:"+b2.multiply(b1));
//需要指定位数,防止无限循环,或者包含在try-catch中 保留10位数
System.out.println("除法操作:"+b2.divide(b1,10,BigDecimal.ROUND_HALF_UP));//将被取消
//两者相比求出最大数
System.out.println("最大数:"+b2.max(b1));
//两者相比求出最小数
System.out.println("最小数:"+b2.min(b1));
//两者比较操作
int flag = b1.compareTo(b2);
if(flag == -1)
System.out.println("比较操作:b1<b2");
else if(flag == 0 )
System.out.println("比较操作:b1 == b2");
else
System.out.println("比较操作:b1>b2");
//尽量采用字符串赋值
System.out.println(new BigDecimal("2.3"));
System.out.println(new BigDecimal(2.3));//实际上不等同于2.3
//需要指定位数,防止无限循环,或者包含于在try-cacth中
BigDecimal num1 = new BigDecimal("10");
BigDecimal num2 = new BigDecimal("3");
BigDecimal num3 = num1.divide(num2,3,BigDecimal.ROUND_HALF_UP);//ROUND_HALF_UP 限制循环次数
System.out.println(num3);
}
}
float double short long
public class Main {
// 测试代码
public static void main(String[] args)
{
float f1 = 1.23f;
//float f2 = 1.23 //error ,float 数值必须带f
double d1 = 4.56d;
double d2 = 4.56;//double 可以省略末尾d
System.out.println(f1);
System.out.println((double)f1);//转化为double//float 后面会自动填补一些数
System.out.println(d1);//类型转换出现的问题
System.out.println((float)d2);
System.out.println((double)f1==1.229999999f); //true
System.out.println(f1==1.229999999f); //true
System.out.println(f1-1.229999999f); //0.0
System.out.println(d2==4.559999999999999999d); //true
System.out.println(d2-4.559999999999999999d); //0.0
short a1 = 32767;
System.out.println(a1);
//short a2 = 32768; error 越界
int b1 = 2147483647;
System.out.println(b1);
//int b2 = 2147483648; error 越界
long c1 = 1000000000000L;
System.out.println(c1);
long c2 = 2147483647; //隐式做了从int变成long的操作
System.out.println(c2);
long c3 = 2147483648L; //去掉L将报错
System.out.println(c3);
}
}
字符串类
import java.util.Calendar;
public class Main {
// 测试代码
public static void main(String[] args)
{
//及时各种字符串类型的添加效率
int n = 50000;
Calendar t1 = Calendar.getInstance();//等价于 Calendar t1 = new Calendar();
String a = new String();
for(int i = 0;i<n;i++) {
a = a + i + ",";
}
//用当前的时间减去t1所在的时间
System.out.println(Calendar.getInstance().getTimeInMillis()-t1.getTimeInMillis());
Calendar t2 = Calendar.getInstance();
StringBuffer b = new StringBuffer("");
for(int i = 0;i<n;i++) {
b.append(i);
b.append(";");
}
System.out.println(Calendar.getInstance().getTimeInMillis()-t2.getTimeInMillis());
Calendar t3 = Calendar.getInstance();
StringBuilder c = new StringBuilder("");
for(int i = 0;i<n;i++) {
c.append(i);
c.append(";");
}
System.out.println(Calendar.getInstance().getTimeInMillis()-t3.getTimeInMillis());
}
}
public class Main {
// 测试代码
public static void main(String[] args) {
//StringBuffer 的初始大小为(16+初始字符串长度)即capacity容量 =16+初始值字符串长度
StringBuffer sb1 = new StringBuffer();
System.out.println(sb1.capacity());
System.out.println(sb1.length());
StringBuffer sb2 = new StringBuffer("123");
sb2.append("456789101112131415");
System.out.println(sb2.length());
System.out.println(sb2.capacity());
//一旦length大于capacity时,capacity便在前一次的基础上加1翻倍
//当前sb2length 20 capacity40 ,再append70个字符 超过(加一再翻倍)
//如果append的对象变得很长很长 ,超过加一翻一倍 ,将以最新的长度更换
}
}
public class Main {
// 测试代码
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("123");
StringBuffer sb2 = sb1;
sb1.append("12345678912345678912345678912345679");
System.out.println(sb2);//说明sb1和sb2还是指向同个内存
}
}
https://baike.baidu.com/item/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1700215?fr=aladdin
public class Main {
// 测试代码
public static void main(String[] args) {
String a = "123;456;789;123";
//返回第0个元素
System.out.println(a.charAt(0));
//返回第一个;的位置
System.out.println(a.indexOf(";"));
//连接一个新的字符串并返回,a不变 不影响a
System.out.println(a.concat(";000"));
System.out.println(a);
//判断a是否包含000
System.out.println(a.contains("000"));
//判断a是否以000结尾
System.out.println(a.endsWith("000"));
//判断a是否等于000
System.out.println(a.equals("000"));
//判断在忽略大小写情况下是否等于000
System.out.println(a.equalsIgnoreCase("000"));
//返回a长度
System.out.println(a.length());
//返回a去除前后空格后的字符串,a不变
System.out.println(a.trim());
//将a字符串按照;分割成数组
String[] b =a.split(";");
for(int i = 0;i<b.length;i++) {
System.out.println(b[i]);
}
//截取a的第二个到第五个字符 a不变
System.out.println(a.substring(2, 5));
System.out.println(a.replace("1", "a"));
//replaceAll第一个参数是正则表达式
System.out.println(a.replaceAll("1","a"));
String s1 = "12345?6789";
String s2 = s1.replace("?", "a");
System.out.println(s2);
String s3 = s1.replaceAll("[?]", "a");
System.out.println(s3);
//将s1内所有数字替换为a并输出,s1的值未改变
System.out.println(s1.replaceAll("[\\d]", "a"));
}
}
时间类
Calendar是父类
GregorianCalendar是子类
一般使用的时候可以使用
Calendar c=new GregorianCalendar();//直接创建
Calendar c=Calendar.getInstance();//工厂方法
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Main {
// 测试代码
public static void main(String[] args) {
Calendar gc = Calendar.getInstance();
System.out.println(gc.getClass().getName());
//Calendar.getInstance();返回的是GregorianCalendar对象
GregorianCalendar gc2 = new GregorianCalendar();
System.out.println(gc2.getClass().getName());//返回的也是GregorianCalendar对象
}
}
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Main {
Calendar calendar = Calendar.getInstance();
public void test1() {
//获取年
int year =calendar.get(Calendar.YEAR);
//获取月,这里需要须知月份的范围是0~11,因此获得月份的时候需要+1才是当前月份值
int month = calendar.get(Calendar.MONTH)+1;
//获得日
int day = calendar.get(calendar.DAY_OF_MONTH);
//获得时
int hour = calendar.get(Calendar.HOUR);
int hour2 = calendar.get(Calendar.HOUR_OF_DAY);//24小时表示
//获得分
int minute = calendar.get(Calendar.MINUTE);
//获得秒
int second = calendar.get(Calendar.SECOND);
//获得星期,英语国家星期从星期日计算
int weekday = calendar.get(Calendar.DAY_OF_WEEK)-1;
System.out.println("现在是"+year+"年"+month+"月"+day+"日"+hour2+"时"+minute+"分"+second+"秒"+"星期"+weekday);
}
public void test2() {
//同理换成下个月的今天calendar.add(Calendar.MONTH,1);
calendar.add(Calendar.YEAR,5);
calendar.add(Calendar.DAY_OF_MONTH, 2);
//获得年
int year = calendar.get(Calendar.YEAR);
//获得月
int month = calendar.get(Calendar.MONTH)+1;
//获得日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("一年后的今天:"+year+"年"+month+"月"+day+"日");
}
public void test3() {
//假设求2月的最后一天
int currenMonth = 2;
//先求出3月的第一天,实际中这里2为外部传递进来的currentMonth变量
//先set 一个七月的第一天 虽然是3 但month是从0开始算的
calendar.set(calendar.get(Calendar.YEAR),currenMonth,1);
calendar.add(Calendar.YEAR,5);//年的改变的话 需要先改如日
calendar.add(Calendar.DATE, -1);
int day =calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("2月份的最后一天为"+day+"号");
}
public void test4() {
calendar.set(Calendar.YEAR, 2000);
int year1 = calendar.get(Calendar.YEAR);
//获取月
int month1 = calendar.get(Calendar.MONTH)+1;
//获取日
int day1= calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("现在是"+year1+"年"+month1+"月"+day1+"日");
calendar.set(2018,7,8);
//获取年
int year = calendar.get(Calendar.YEAR);
//获取月
int month = calendar.get(Calendar.MONTH)+1;
//获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("现在是"+year+"年"+month+"月"+day+"日");
}
public void test5() {
calendar.set(2018, 7,8);//7是八月
//calendar.add(Calendar.DAY_OF_MONTH,-8);
calendar.roll(Calendar.DAY_OF_MONTH,-8);
//获得年
int year = calendar.get(Calendar.YEAR);
//获得月
int month = calendar.get(Calendar.MONTH)+1;
//获得日
int day = calendar.get(Calendar.DAY_OF_MONTH);
//System.out.println("2018.8.8, 用add减少8天,现在是" + year + "." + month + "." + day);
System.out.println("2018.8.8, 用roll减少8天,现在是" + year + "." + month + "." + day);//其他如MONTH YEAR没有连锁改变
}
// 测试代码
public static void main(String[] args) {
Main m = new Main();
m.test5();
}
}
import java.time.LocalTime;
import java.time.ZoneId;
public class Main {
// 测试代码
public static void main(String[] args) {
//当前时间时分秒 纳秒
LocalTime time = LocalTime.now();
System.out.println("Curren Time="+time);
//根据时分秒
LocalTime specificTime = LocalTime.of(12, 20,25,40);
System.out.println("specific Time of Day ="+specificTime);
//错误的时间参数 将报DateTimeException
//LocalTime invalidTime = LocalTime.of(25,20);
//上海时间
LocalTime timeSH = LocalTime.now(ZoneId.of("Asia/Shanghai"));//Tokyo
System.out.println("Current Time in SH="+timeSH);
//一天当中第几秒
LocalTime specificSecondTime = LocalTime.ofSecondOfDay(10000);
System.out.println("10000th second time = "+ specificSecondTime);
}
}
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
public class Main {
// 测试代码
public static void main(String[] args) {
//当前日期时分秒
LocalDateTime today = LocalDateTime.now();
System.out.println("today is "+today);
//根据日期,时分秒来创建对象
System.out.println(LocalDate.now());//日期
System.out.println(LocalTime.now());//时间
today = LocalDateTime.of(LocalDate.now(),LocalTime.now());
System.out.println(today);
//指定具体时间来创建对象
LocalDateTime specificDate = LocalDateTime.of(2014,Month.JANUARY,1,10,10,30);
System.out.println(specificDate);
//如时间不对,将报异常DateTimeException
//LocalDateTime feb29_2014 = LocalDateTime.of(2014,Month.FEBRUARY,28,25,1,1);
//上海时区
LocalDateTime todayShanghai = LocalDateTime.now();
//LocalDateTime todayShanghai = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));;
System.out.println(todayShanghai);
//从01/01/1970 10000秒
LocalDateTime dateFromBase = LocalDateTime.ofEpochSecond(10000,0,ZoneOffset.UTC);
System.out.println(dateFromBase);
}
}
import java.util.Date;;
public class Main {
// 测试代码
public static void main(String[] args) {
Date d = new Date();
System.out.println(d);
System.out.println(d.getTime());//the number of milliseconds since 1970.1.1 00:00:00
}
}
import java.util.Date;
import java.time.Instant;
public class Main {
// 测试代码
public static void main(String[] args) {
//当前时间戳
Instant timestamp = Instant.now();
System.out.println(timestamp);
//用毫秒来创建时间戳
Instant specificTime = Instant.ofEpochMilli(timestamp.toEpochMilli());
System.out.println(specificTime);
Date date = Date.from(timestamp);
System.out.println(date);
}
}
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Month;
import java.time.ZoneId;
public class Main {
// 测试代码
public static void main(String[] args) {
//当前时间
LocalDate today = LocalDate.now();
System.out.println(today);
//根据指定时间创建LocalDate
LocalDate firstDay_2014 = LocalDate.of(2014,Month.JANUARY,1);
System.out.println(firstDay_2014);
//给定错误时间参数,将报异常java.time.DateTimeException
//LocalDate feb29_2014 = LocalDate.of(2014,Month.FEBRUARY,29);
LocalDate todayBeijing = LocalDate.now(ZoneId.of("Asia/Shanghai"));
System.out.println(todayBeijing);
LocalTime todayTokyo = LocalTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(todayTokyo);
//从纪元日01/01/1997开始365天
LocalDate dateFromBase = LocalDate.ofEpochDay(365);
System.out.println(dateFromBase);
//2014年的第100天
LocalDate hundredDay2014 = LocalDate.ofYearDay(2014, 100);
System.out.println(hundredDay2014);
}
}
import java.time.Period;
import java.time.temporal.TemporalAdjusters;
import java.time.LocalDate;
import java.time.LocalTime;
public class Main {
// 测试代码
public static void main(String[] args) {
LocalDate today =LocalDate.now();
//判断是否为闰年
System.out.println(today.isLeapYear());
//今天和01/01/2015比较
System.out.println(today.isBefore(LocalDate.of(2015, 01, 01)));
//当前时分秒
System.out.println(today.atTime(LocalTime.now()));
//加减时间
System.out.println(today.plusDays(10));
System.out.println(today.plusWeeks(3));
System.out.println(today.plusMonths(20));
System.out.println(today.minusDays(10));
System.out.println(today.minusWeeks(3));
System.out.println(today.minusMonths(20));
//调整时间
System.out.println(today.with(TemporalAdjusters.firstDayOfMonth()));
LocalDate lastDayOfYear = today.with(TemporalAdjusters.lastDayOfYear());
System.out.println(lastDayOfYear);
//时间段计算
Period period = today.until(lastDayOfYear);
System.out.println(period);
System.out.println(period.getMonths());
}
}
格式类
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
// 测试代码
public static void main(String[] args) {
//将字符串转化为时间
String dateStr = "2016年10月25日";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");//注意大小写
LocalDate date = LocalDate.parse(dateStr, formatter);
System.out.println(date.getYear()+"-"+date.getMonthValue()+"-"+date.getDayOfMonth());
//将日期转化为字符串输出
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy年MM月dd日 hh:mm:ss");
String nowStr = now.format(format);
System.out.println(nowStr);
}
}
import java.text.DecimalFormat;
public class Main {
// 测试代码
public static void main(String[] args) {
//将字符串转化为时间
DecimalFormat df1,df2;
System.out.println("整数部分分为0的去情况,0/# 的区别");
//整数部分为0,#认为整数不存在,可不写;0认为没有,但至少写以为,写0
df1 = new DecimalFormat("#.00");
df2 = new DecimalFormat("0.00");
System.out.println(df1.format(00.1));
System.out.println(df2.format(.10));
System.out.println("小数部分0/#的区别");
df1 = new DecimalFormat("0.00");
df2 = new DecimalFormat("0.##");
System.out.println(df1.format(0.1));
System.out.println(df2.format(0.1));
System.out.println(df1.format(0.004));//满足四舍五入
System.out.println(df2.format(0.006));
System.out.println("整数部分有多位");
//0与#对整数部分多位时的处理是一致的 就是有几位写几位
df1 = new DecimalFormat("0.00");
df2 = new DecimalFormat("#.00");
System.out.println(df1.format(2.111)); // 2.00
System.out.println(df2.format(2)); // 2.00
System.out.println(df1.format(20)); // 20.00
System.out.println(df2.format(20)); // 20.00
System.out.println(df1.format(200)); // 200.00
System.out.println(df2.format(200)); // 200.00
}
}
import java.text.DecimalFormat;
import java.math.BigDecimal;
import java.text.NumberFormat;
public class Main {
// 测试代码
public static void main(String[] args) {
double f = 111231.5585;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
System.out.println(f1);//保留两位小数 四舍五入
DecimalFormat df = new DecimalFormat("#.00");
String f2 = df.format(f);
System.out.println(f2);////保留两位小数 四舍五入
String f3 = String.format("%.2f", f);
System.out.println(f3);
NumberFormat ddf1 = NumberFormat.getInstance();
System.out.println(ddf1.getClass().getName());
ddf1.setMaximumFractionDigits(2);
String f4 = ddf1.format(f);
System.out.println(f4);
}
}
import java.text.DecimalFormat;
public class Main {
// 测试代码
public static void main(String[] args) {
double pi = 3.1415927;//圆周率
//取一位整数
System.out.println(new DecimalFormat("0").format(pi));
System.out.println(new DecimalFormat("0.00").format(pi));
System.out.println(new DecimalFormat("00.000").format(pi));
//去所有整数部分
System.out.println(new DecimalFormat("#").format(pi));//忽略了.########
//以百分比方式计数,并取两位小数
System.out.println(new DecimalFormat("#.##%").format(pi));
long c =299792458;
//显示为科学计数法,并取五位小数
System.out.println(new DecimalFormat("#.#####E0").format(c));
//显示为两位整数的科学计数法 ,并取四位小数
System.out.println(new DecimalFormat("00.####E0").format(c));
System.out.println(new DecimalFormat(",###").format(c));
System.out.println(new DecimalFormat("光速大小为每秒,#.##E0米").format(c));
}
}
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
// 测试代码
public static void main(String[] args) {
String strDate = "2008-10-19 10:11:30.345";
String pat1 = "yyyy-MM-dd HH:mm:ss.SSS";
String pat2 = "yyyy年MM月dd日HH时mm分ss秒SSS毫秒";
//准备第一个模板,从字符串中提取日期数字
SimpleDateFormat sdf1 = new SimpleDateFormat(pat1);
SimpleDateFormat sdf2 = new SimpleDateFormat(pat2);
Date d = null;
try{
d = sdf1.parse(strDate) ; // 将给定的字符串中的日期提取出来
}
catch(Exception e){ // 如果提供的字符串格式有错误,则进行异常处理
e.printStackTrace() ; // 打印异常信息
}
System.out.println(sdf2.format(d)) ; // 将日期变为新的格式
}
}
import java.text.MessageFormat;
public class MessageFormatTest {
public static void main(String[] args) {
String message = "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}";
Object[] array = new Object[]{"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"};
String value = MessageFormat.format(message, array);
System.out.println(value);
message = "oh, {0,number,#.##} is a good number";
array = new Object[]{new Double(3.1415)};
value = MessageFormat.format(message, array);
System.out.println(value);
}
}
import java.text.DecimalFormat;
public class DecimalFormatTest {
public static void main(String[] args) {
DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
System.out.println(df1.format(12.34)); //12.3
System.out.println(df2.format(12.34)); //12.3
System.out.println(df3.format(12.34)); //012.340
System.out.println(df4.format(12.34)); //12.34
DecimalFormat df5 = new java.text.DecimalFormat("0.00");// 保留2位小数
double d1 = 123456789.123456;
double d2 = 987654321.987654321;
System.out.println("format1_d1=" + df5.format(d1));// 输出format1_d1=123456789.12
System.out.println("format1_d2=" + df5.format(d2));// format1_d2=987654321.99
// 四舍五入
DecimalFormat df6 = new DecimalFormat("#,##0.00");
System.out.println("format2_d1=" + df6.format(d1));// 输出:format2_d1=123,456,789.12
System.out.println("format2_d2=" + df6.format(d2));// 输出:format2_d2=987,654,321.99
// 四舍五入
}
}