【java知识点】常用类的用法

随机数类 

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
															// 四舍五入

	}

}

猜你喜欢

转载自blog.csdn.net/kevin_nan/article/details/87955857