JAVA高级特性-工具类

1.包装类 

    所有基本类型对应的包装类:
		boolean		Boolean
		byte		Byte
		char		Character
		short		Short
		int			Integer
		long		Long
					BigIneger   ★
		float		Float
		double		Double
					BigDecimal  ★
		string		String      ★

        T t=v;
        包装类的对象都是【常量】,只能一次性赋值,或重复赋相同值
        若赋不同的值将会创建新对象

意义:
        扩展了基本类型的行为
        弥补了基本类型不能作为泛型的不足
        自动装箱,自动拆箱

1.1类型转换

        1、类型转换一(数值)
			int a=5;
			1.1自动类型转换:小转大(存储空间)
				整数转小数:double b=a;
			1.2强制转换:大转小
				小数转整数:
				int c=(int)b;
				long d=12888299939223L; #整数默认为int,所以数值超出int范围要L强制
				float e=1.23F;          #小数默认为double,所以数值降为float要F强制
		2、类型转换二(多态)
			抽象的引用指向子类的实例(对象:普通类,[匿名]内部类)
			Iterable<T> al=new ArrayList();
			Collection<T> al=new ArrayList();
			Set<T> al=new ArrayList();
			ArrayList<T> al=new ArrayList();
			2.1自动类型转换:小转大(存储空间)
				父(类|接口)引用指向子类的对象
				比如:Iterable<T> it=new ArrayList();
			2.2强制转换:大转小
				将父引用还原成其真实的子类引用
				比如:ArrayList<T> al=(ArrayList)it;   #通过
				再如:LinkedList<T> l1=(LinkedList)it; #异常:ClasscastException
		3、将其他类型转化为字符串
			String str=String.valueOf(一切基础类型);
		4、将字符串转化为其他类型
			将字符串转化为包装类对应的基本类型
			t v=T.parseT(String value);
			将字符串转化为包装类对应的引用类型
			T v=T.valueOf(String value);

1.2字符串的常用方法

#【静态方法】
		1、将数组arr从offset(默认0)开始(包含)的count(默认arr.length)个字符转化为字符串
			String s = String.copyValueOf(char[] arr,int offset,int count);
		2、格式化字符串
			2、1方法一:
			#格式中通配符的数量必须和参数2的元素数量一致
			# %s 字符串
			# %d 整数
			# %[.n]f 小数(n表示小数精度)
			String format=String.format(String format,Object...args)
			2、2方法二:
			#格式中占位符中的数值和参数2中元素数量一致:args.length==5,那占位符区间0~4
			String format=MessageFormat.format(String format,Object...args);
			2、3字符串拼接
			StringBuilder [非多线程并发环境首选]
			StringBuffer  [多线程环境首选]
			StringBuilder builder=new StringBuilder();
			#T若为基础类型或包装类直接放入参数即可,若为自定义类型需要重写toString()方法
			builder.append(T t);
			...
			String str=builder.toString();
		3、 将可变参数或可迭代参数的元素用参数1字符串作为分隔符连接成一个长字符串
		String join = String.join(String sep, String...element|Iterable<String>);
			
#【对象方法】
			String a="henrt.iii@hwww.com";
        	int length = a.length(); #提取字符串的长度(字符串中字符的数量)

            #提取第一个参数1字符串sub在a中的下标位置
        	    int firstDotIx = a.indexOf(String sub);
            #提取从参数2fromInclusiveIx开始第一个sub出现的位置
			    int sndDotIx = a.indexof(String sub,int fromInclusiveIx);
		    #提取最后一个参数1字符串sub在a中的下标位置
			    int lastDotIx = a.1astIndexof(String sub);
		    #提取从参数2fromInclusiveIx结束最后一个sub出现的位置
			    int lastsndDotIx = a.lastIndexof(".",a.lastIndexof(". ")-1);

            #截取a从fromInclusiveIx开始的所有字符
        	    String sub=a.substring(int fromInclusiveIx);
            #截取a从fromInclusiveIx开始至toExclusiveIx结束的所有字符
        	    String sub=a.substring(int fromInclusiveIx,int toExclusiveIx);
            #提取指定下标位置的字符
        	    char c=a.charAt(int index);
        
            #将字符串中的所有字符按顺序以字符输出
        	    char[] chars = a.toCharArray();
        
            #大小写转换
        	    a.toUpperCase();#小写转大写
        	    a.toLowerCase();#大写转小写
         
            #去除左右两边的空(\r  \n  \t  '')内容
        	    String trim=a.trim();
        
            #判断开始或结束序列
        	    boolean yes=a.startsWith(String sub);
        	    boolean yes1=a.endsWith(String sub);
        
            #字符串比较
        	    boolean yes=a.equals(String b);#等值
        	    boolean yes=a.equalsIgnoreCase(String b);  #等值(忽略大小写)
        	    int cmp=a.compareTo(String b);#大小:<0  a<b; =0  a==b; >0  a>b
        	    int cmp=a.compareToIgnoreCase();#忽略大小写比较

2.日期

    java.util.Date
		Date date = new Date();#构建默认获取系统当前的日期对象
        Date date1 = new Date(1234567891234L);#构建指定时间戳的日期对象
        long l = System.currentTimeMillis();#获取系统当前时间戳
	
	java.text.SimpleDateFormat
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String format = sdf.format(new Date());
        Date parse = sdf.parse("2021-12-13 08:30:01.003");
        
	java.util.Calendar
		Calendar calendar=Calendar.getInstance();
		#设置时区
        	calendar.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")));
        #设置日期的值:(以下6种)根据已知条件选择合适的方法
        	calendar.setTime(new Date());
        	calendar.setTimeInMillis(1234567891234L);
        	calendar.set(2000,12,12);
        	calendar.set(2002,12,12,13,33);
        	calendar.set(2002,12,12,13,33,22);
        	calendar.set(Calendar.YEAR,2000);
        #提取日期
        	Date now = calendar.getTime();
        	long timeInMillis = calendar.getTimeInMillis();
        	int year= calendar.get(Calendar.YEAR);
        	int month = calendar.get(Calendar.MONTH);
        	int quarter=month/3+1;
        	month+=1;
        	int day=calendar.get(Calendar.DATE);
        	int hour = calendar.get(Calendar.HOUR_OF_DAY);
        	int minute = calendar.get(Calendar.MINUTE);
        	int second = calendar.get(Calendar.SECOND);
        	int millisecond = calendar.get(Calendar.MILLISECOND);
        	int dsfOffset = calendar.get(Calendar.DST_OFFSET);
        	int zoneOffset = calendar.get(Calendar.ZONE_OFFSET);
        	int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);#周日-周六 1~7
        	int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH);#月第几周
        	int dayOfWeekInMonth = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);#每月1号开始,每7天算一周,提取当前日期属于当月第几周
        	int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR);#年日
        	int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);#年第几周
        #比较
        	boolean before = calendar.before(c2);
        	boolean after = calendar.after(c2);
        	int cmp = calendar.compareTo(c2);
        #计算
        	calendar.roll(int field,boolean up);
        	calendar.roll(int field,int amount);
        	calendar.add(int field,int amount);

3.枚举

        通常用于维护固定数量的【自定义状态值】供系统验证使用
        public enum NAME{v1,.. .,VN} #和 switch...case搭档最佳 

4.正则

#替换,分割,匹配,分组提取
	#正则的语法构成
		#内容
			常量
			^		开始
			$		结束
			[]		一个指定范围内的内容[0-9] [2468]
			[^]		一个指定范围外的内容[^0-9] [^2468]
			|		2选1  ([0-9]|[a-z])
			()		组合
			.		表示一个任意符号
			\\		转译符(将语法关键字作为符号常量使用)  \\.
			\\d		[0-9]
			\\D		[^0-9]
            \\w		[a-zA-Z0-9_]
            \\W		[^a-zA-Z0-9_]
            \\s		[ \t\r\n]  一个空符号
            \\S		[^ \t\r\n]
		#内容的重复
			{N}		固定匹配 [0-9]{5}=>表示5个数字
			{N,}	最小匹配 [a-z]{3,}=>最少3个小写英文字母
			{,N}	最大匹配 [a-z]{,3}=>最多3个大写英文字母
			{N,N}	区间匹配 [a-z]{3,5}=>最少3个最多5个小写英文字母
			?		{0,1}   可有可无
			+		{1,}   至少一个
			*		{0,}    0~+∞
		#贪婪模式、懒汉模式
			.*		任意个任意符号(尽可能多匹配)
			.*?		任意个任意符号(尽可能少匹配)
			比如:abc,def,hij,lmn,789     (.*),(.*?)$=>取abc,def,hij,lmn

        #【正则1】将字符串a中符合regex正则条件的所有内容替换为replace内容并返回替换后的结果字符串
        	String s = a.replaceAll(String regex,String replace);★★★
        	String s = a.replaceFirst(String regex,String replace);★★★
        	String replace=a.replace(char old,char new);
        	String replace1=a.replace(String old,String new);
        
        #【正则2】以字符串a中符合参数1正则规则的符号将字符串分割成字符串数组
        #若出现连续的分隔符或头尾出现分隔符,左侧会被多拆分一个空字符串出来,而末尾不会
        	String[] split = a.split(String regex);
        
        #【正则3】正则匹配:返回a是否满足参数正则规则
        	boolean matches = a.matches(String regex);

		#【正则4】分组
			java.util.regex.Matcher;			#^$  整体匹配
			java.util.regex.Pattern;
			Pattern p=Pattern.compile(regex);	#正则对象
        	Matcher m=p.matcher(content);		#匹配对象
        	boolean b=m.find();					#内容是否匹配正则
        	int count=m.groupCount();			#若匹配,提取分组数量
        	String group=m.group(int n);		#提取第n个分组的内容

5.数学

        #精度
			long round = Math.round(1.234);
        	double ceil = Math.ceil(1.0001);
        	double floor = Math.floor(1.999999);
        	BigDecimal bigDecimal = new BigDecimal(1.2345).setScale(3, RoundingMode.HALF_UP);
        #幂
        	double pow = Math.pow(8, 1.0/3);
        #对数
       		public static double log(double value,doub1e base){
				return Math.log(value)/Math.1og(base);
			}
		#其他
			Num c=Math.min(Num a,Num,b);
			Num c=Math.max(Num a,Num,b);
			final double PI=Math.PI;
			final double E=Math.E;
			Num abs=Math.abs(Num n); #绝对值
			double radians=Math.toRadians(double degree);#角度转弧度
			double degree=Math.toDegree(double radians);#弧度转角度

6.Arrays

    List<T> list = Arrays.asList(t1....tn);
	String str=Arrays.toString(T[] ts);#T若为自定义类型需重写toString()方法
	boolean equals=Arrays.equals(T[] ts1,T[] ts2);#两个数组比较
	Arrays.sort(T[] ts,Comparator<T> cmp);
	Arrays.sort(T[] ts);#T若为自定义类型需要实现Comparator<T>接口要重写comparaTo方法
	int pos= Arrays.binarySearch(T[] ts,T key,Comparator<T> cmp);

 7.System

     long l = System.currentTimeMillis();
     System.arraycopy(T[] src,int fromSrcIx,T[] dest,int fromDesIx;int size);
     #了解
     System.gc();#通知或建议虚拟机进行垃圾回收
     System.setProperty(String key,String value);#设置当前工程运行时环境共享变量(工程内共享)
     String my=System.getProperty(String key);
     System.getenv(String key);#获取当前jvm运行的操作系统环境变量(工程间共享)
     long nanosec=System.nanoTime();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值