day20_java常用类

java常用类

字符串相关的类:String

String的特性

在这里插入图片描述

  • String类:代表字符串。Java程序中所有字符串面值都可以作为此类的实例实现

  • String是一个final类,代表不可变的字符序列

  • 字符串是常量,用双引号引起来表示。他们的值在创建之后不能修改。

  • String对象的字符内容是存储在一个字符数组value[]中的

  • 通过字面量的形式给一个字符串赋值,此时的字符串值申明在字符串常量池中

    • public class Demo1 {
      	public static void main(String[] args) {
      		String s1="Abc";
      		String s2="Abc";
      		//判断s1与s2的地址是否相同
      		System.out.println(s1==s2);//true
      	}
      }
      
    • 常量池中不存在相同值的两个字符串,值相同的字符串地址一致

    • 字符串的不可变性:

      • 不可以在原有地址的基础上重新赋值
String实例化的方式
String构造器的方式

在这里插入图片描述

两种主要方式及其对比
public class Demo1 {
	public static void main(String[] args) {
		/*
		 * 字符串两种赋值方式的对比
		 */
		// 1.直接显示赋值
		//此时创建的对象指向方法区的字符串常量池
		String s1="China";
		String s2="China";
		// 2.通过new方式创建对象
		//此时创建的对象对应于堆空间方法区常量池
		//通过new String()的方式创建对象实质创建了两个对象:①new的对象②char[]指向
		String s3=new String("China");
		String s4=new String("China");
		System.out.println(s1==s2); //true
		System.out.println(s1==s3); //false
		System.out.println(s1==s4); //false
		System.out.println(s3==s4); //false
		
		Person p1=new Person("Tome",18);
		Person p2=new Person("Tome",22);
		System.out.println(p1.name.equals(p2.name)); //true
		System.out.println(p1.name==p2.name); //true
		
		Person p3=new Person(s1,18);
		Person p4=new Person(s1,22);
		System.out.println(p3.name.equals(p4.name)); //true
		System.out.println(p3.name==p4.name); //true
		
}
}

在这里插入图片描述

在这里插入图片描述

String不同拼接方式对比
public class Demo2 {
	public static void main(String[] args) {
		/*
		 * 字符串多种拼接方式比较
		 */
		String s1="hello";
		String s2="World";
		
		String s3="helloWorld";
		String s4=s1+"World";
		String s5="hello"+s2;
		String s6=s1+s2;
		String s7="hello"+"World";
		String s8=s4.intern();
		System.out.println(s3==s4);//false
		System.out.println(s3==s5);//false
		System.out.println(s3==s6);//false
		System.out.println(s3==s7);//true
		System.out.println(s4==s5);//false
		System.out.println(s3==s8);//true
	}
	
}
结论
  • 常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量(字符串的不可变性)
  • 只要其中有一个是变量,结果就在堆中
  • 如果拼接的结果调用intern()方法,返回值就在常量池中
public class Demo3 {
	public static void main(String[] args) throws UnsupportedEncodingException {
		//字符串拼接
		String s1="hello";
		final String s2="hello";
		String s3="helloworld";
		String s4=s1+"world";
		String s5=s2+"world";
		System.out.println(s3==s4); //false
		// s2前加了关键字final,s2所以为常量,也位于方法区的常量池
		System.out.println(s3==s5); //true
		
	}
}
String的常用方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
String与基本数据类型和包装类之间的转换
Stringchar[]之间的转换
public class Demo3 {
	public static void main(String[] args) {
		//String与char[]之间的转换
		
		//1.String-->>char[]
		String s="hello";
		char[] arr1=s.toCharArray();
		for(int i=0;i<arr1.length;i++){
			System.out.println(arr1[i]);
		}
		
		//2. char[]-->>String
		char[] arr2=new char[]{'w','o','r','l','d'};
		String str=new String(arr2);
		System.out.println(str);
	}
}
Stringbyte[]之间的转换
public class Demo3 {
	public static void main(String[] args) throws UnsupportedEncodingException {
		/*
		 * String与byte[]之间的转换:
		 * 	实质:String中的各个字符按照对应的字符集进行编码解码(如ASCII码)的过程
		 */
		// 1. String-->>byte[]
		String str1="abc123";
		byte[] b=str1.getBytes(); //按照默认的字符集进行编码
		System.out.println(Arrays.toString(b)); //[97, 98, 99, 49, 50, 51]
		byte[] b1=str1.getBytes("gbk");//按照指定的编码方式进行编码
		System.out.println(Arrays.toString(b1));//[97, 98, 99, 49, 50, 51]
		// 2. byte[]-->>String
		byte[] b2=new byte[]{49,50,65,97};
		String str2=new String(b2);
		System.out.println(str2); //12Aa
		String str3=new String(b2,"gbk"); //按照指定字符集进行解码
		System.out.println(str3);
	}
}
String算法考察面试

在这里插入图片描述

在这里插入图片描述

  • 2 三种方法

  • 第四题的解法

    • public class Demo3 {
      	public static void main(String[] args) throws UnsupportedEncodingException {
      		Demo3 d=new Demo3();
      		String str1="ghhjkkssdddlllhellokkjj";
      		String str2="dddlllhel";
      		System.out.println(d.MaxSame(str1, str2));
      		
      	}
      	//只返回第一最大子串的情况
      	String MaxSame(String str1,String str2){
      		String maxStr=(str1.length()>=str2.length())?str1:str2;
      		String minStr=(str1.length()<str2.length())?str1:str2;
      		StringBuilder builder=new StringBuilder(minStr.length());
      		for(int i=0;i<minStr.length();i++){
      			for(int start=0,end=minStr.length()-i;end<=minStr.length();start++,end++)
      			{
      				if(maxStr.contains(minStr.substring(start, end))){
      					builder.append(minStr.substring(start, end));
      					return builder.toString();
      				}
      			}
      		}
      		return builder.toString();
      		
      	}
      }
      
    • import java.io.UnsupportedEncodingException;
      import java.util.Arrays;
      import java.util.Date;
      
      public class Demo3 {
      	public static void main(String[] args) throws UnsupportedEncodingException {
      		Demo3 d=new Demo3();
      		String str1="ghhjkkssdddlllhellokkjj";
      		String str2="ssshellojjokkjjssghhjk";
      		System.out.println(Arrays.toString(d.MaxSame(str1, str2)));
      		
      	}
      	//返回所有的最大相同子串
      	String[] MaxSame(String str1,String str2){
      		String maxStr=(str1.length()>=str2.length())?str1:str2;
      		String minStr=(str1.length()<str2.length())?str1:str2;
      		StringBuilder builder=new StringBuilder(minStr.length());
      		for(int i=0;i<minStr.length();i++){
      			for(int start=0,end=minStr.length()-i;end<=minStr.length();start++,end++)
      			{
      				if(maxStr.contains(minStr.substring(start, end))){
      					builder.append(minStr.substring(start, end)+",");
      					
      				}
      			}
      			if(builder.length()!=0) break;
      		}
      		String[] result=builder.toString().replaceAll(",$", "").split("\\,");
      		return result;
      		
      		
      	}
      }
      
StringBufferStringBuilder
StringStringBufferStringBuilder三者的异同?
  • String:不可变的字符序列
  • StringBuffer:可变字符序列;线程安全,效率低
  • StringBuilder:可变字符序列;jdk5.0新增的,线程不安全,效率高
  • 三者底层都是采用char[]进行存储
StringBuffer源码分析
创建:
  • String str=new String();//相当于char value=new char[0];
    
    String str=new String("abc");//相当于char[] value=new char[]{'a','b','c'};
    
  • StringBuffer str1=new StringBuffer();//相当于char[] value=new char[16];
    //在底层会创建一个长度为16的数组
    StringBuffer str2=new StringBuffer("abc");//相当于创建char[] value=new char["abc".length+16]
    
    • 在这里插入图片描述

    • 在这里插入图片描述

    • public class Demo3 {
      	public static void main(String[] args) throws UnsupportedEncodingException {
      		StringBuffer str=new StringBuffer("abc");
      		System.out.println(str.length()); //3,实际内容长度为多少属性length也就为多少
      	}
      }
      
    • 添加数据导致数组存储空间不足,此时要进行扩容(参考append方法的实现)

      • 默认扩容为原始两倍加2
StringBuffer的常用方法

在这里插入图片描述

在这里插入图片描述

StringStringBufferStringBuilder效率对比
public class Demo3 {
	public static void main(String[] args) throws UnsupportedEncodingException {
		/*
		 * String、StringBuffer、StringBuilder三者效率对比
		 *
		 */
		long startTime=0L;
		long endTime=0L;
		String text="";
		StringBuffer str1=new StringBuffer("");
		StringBuilder str2=new StringBuilder("");
		startTime=System.currentTimeMillis();
		for(int i=0;i<20000;i++){
			str1.append(String.valueOf(i));
		}
		endTime=System.currentTimeMillis();
		System.out.println("StringBuffer所需时间:"+(endTime-startTime));
		
		startTime=System.currentTimeMillis();
		for(int i=0;i<20000;i++){
			str2.append(String.valueOf(i));
		}
		endTime=System.currentTimeMillis();
		System.out.println("StringBuilder所需时间:"+(endTime-startTime));
		
		startTime=System.currentTimeMillis();
		for(int i=0;i<20000;i++){
			text+=i;
		}
		endTime=System.currentTimeMillis();
		System.out.println("String所需时间:"+(endTime-startTime));
		
		/*
		 * 运行结果:
		 * 	StringBuffer所需时间:5
			StringBuilder所需时间:6
			String所需时间:536
		 * 
		 * 
		 */	
	}
	
}

JDK8之前关于日期和时间的API

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实例:
public class Demo3 {
	public static void main(String[] args) throws UnsupportedEncodingException {
		//1.空参构造器
		Date d1=new Date();
		System.out.println(d1.toString());//Sat Feb 19 20:05:18 CST 2022
		System.out.println(d1.getTime());//1645272318767
		
		//2.含参构造器
		Date d2=new Date(1645272318767L);//创建指定时间的对象
		System.out.println(d2.toString());
		
		//3. java.sql.Date对应数据库中的日期类型,他是java.util.Date的子类
		java.sql.Date d3=new java.sql.Date(1645272318767L);
		System.out.println(d3.toString()); //2022-02-19
		
	}
	
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo4 {
	public static void main(String[] args) throws ParseException {
		/*
		 SimpleDateFormat的使用:SimpleDateFormat对日期Date类的格式化和解析
		 1.两个操作:
		 1.1格式化:日期-->>指定格式化字符串
		 1.2解析:字符串-->>日期,格式化的逆过程
		 */
		//1.对象创建
		SimpleDateFormat sdf=new SimpleDateFormat();
		Date d=new Date();
		//1.1日期对象格式化
		System.out.println(d); //Mon Feb 21 20:04:20 CST 2022
		String sd=sdf.format(d);
		System.out.println(sd);  //22-2-21 下午8:04
		//1.2解析
		//非空参构造器,按照指定模式格式化和解析
		Date d1=sdf.parse("22-4-21 下午9:04");
		System.out.println(d1); //Thu Apr 21 21:04:00 CST 2022
		
		//1.1格式化
		SimpleDateFormat sdf1=new SimpleDateFormat("yyyy.MM.dd G 'at' HH:mm:ss z");
		String sd1=sdf1.format(d);
		System.out.println(sd1); //2022.02.21 公元 at 20:09:22 CST
		//1.2解析
		Date d2=sdf1.parse("2022.04.25 公元 at 20:19:22 CST");
		System.out.println(d2);  //Mon Apr 25 20:19:22 CST 2022
		
	}
}

在这里插入图片描述

实例:
public class Demo4 {
	public static void main(String[] args) throws ParseException {
		/*
		 * Calendar类的使用
		 */
		//1.对象创建,Calendar为抽象类不可直接实例化,需实例化其子类对象GregorianCalendar或者调用静态方法getInstance
		Calendar calendar=Calendar.getInstance();
		
		//2.常用方法
		//get()
		int days=calendar.get(Calendar.DAY_OF_MONTH); //获取当前时间为当月的第几天,field具体含义查看API文档
		System.out.println(days); //22
		
		//set()
		calendar.set(Calendar.DAY_OF_MONTH, 10); //对当前日期相关属性进行设置
		days=calendar.get(Calendar.DAY_OF_MONTH); 
		System.out.println(days); //10
		
		//add()
		calendar.add(Calendar.DAY_OF_MONTH, -5);
		days=calendar.get(Calendar.DAY_OF_MONTH); 
		System.out.println(days); //5
		
		//Calendar与Date之间的转换
		//getTime()
		Date d=calendar.getTime();
		System.out.println(d.toString()); //Sat Feb 05 08:16:42 CST 2022
		
		//setTime()
		d=new Date();
		calendar.setTime(d);
		days=calendar.get(Calendar.DAY_OF_MONTH); 
		System.out.println(days); //22
		
	}
}

JDK8中新日期时间API

背景

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实例:
public class Demo4 {
	public static void main(String[] args) throws ParseException {
		/*
		 * LocalDate,LocalTime,LocalDateTime的使用
		 */
		//.now()获取当前的日期,时间,日期+时间
		LocalDate date=LocalDate.now();
		LocalTime time=LocalTime.now();
		LocalDateTime dateTime=LocalDateTime.now();
		System.out.println(date); //2022-02-22
		System.out.println(time); //08:32:50.546
		System.out.println(dateTime); //2022-02-22T08:32:50.546
		
		//of(),根据指定时间,日期创建对象
		LocalDateTime dateTime1=LocalDateTime.of(2020, 12, 31, 2, 43);
		System.out.println(dateTime1); //2020-12-31T02:43
		
		//getXxx(),获取相应的属性
		System.out.println(dateTime1.getDayOfYear()); //366
		System.out.println(dateTime1.getHour()); //2
		System.out.println(dateTime1.getMonth());//DECEMBER
		System.out.println(dateTime1.getMonthValue()); //12
		
		//withXxxx,对当前对象属性进行修改,体现不可变性,创建新的对象,原始对象不变
		LocalDateTime dt=dateTime1.withDayOfYear(23);
		System.out.println(dt); //2020-01-23T02:43
		
		//plusXxx,在当前基础上添加一定的值
		LocalDateTime dt1=dt.plusYears(2);
		System.out.println(dt1); //2022-01-23T02:43
		
		//minusXxx,在当前基础上减去一定的值
		LocalDateTime dt2=dt.minusDays(10);
		System.out.println(dt2); //2020-01-13T02:43
	}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class Demo4 {
	public static void main(String[] args) throws ParseException {
		//java.time.format.DateTimeFormatter类替代以前的java.util.SimpleDateFormat
		
		//1.创建对象
		DateTimeFormatter dtf=DateTimeFormatter.ISO_DATE_TIME;
		
		//2.格式化,Date-->>String
		LocalDateTime ldt=LocalDateTime.now();
		System.out.println(ldt); //2022-02-22T22:11:52.758
		String format=dtf.format(ldt);
		System.out.println(format); //2022-02-22T22:11:52.758
		
		//3.解析,String-->>Date
		TemporalAccessor date=dtf.parse("2022-02-22T22:11:52.758");
		System.out.println(date);  //{},ISO resolved to 2022-02-22T22:11:52.758
		
		//4.本地化相关格式
		DateTimeFormatter dtf1=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
		System.out.println(dtf1.format(ldt)); //22-2-22 下午10:19
		
		DateTimeFormatter dtf2=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
		System.out.println(dtf2.format(ldt)); //2022年2月22日 下午10时19分47秒
		
		//5.自定义格式
		DateTimeFormatter dtf3=DateTimeFormatter.ofPattern("yyyy-MM-dd");
		System.out.println(dtf3.format(ldt)); //2022-02-22
		
		
		
	}
}

在这里插入图片描述

在这里插入图片描述

Java比较器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实例:
import java.text.ParseException;
import java.util.Arrays;

public class Demo4 {
	public static void main(String[] args) throws ParseException {
		//对自定义类进行排序比较
		Goods[] arr=new Goods[4];
		arr[0]=new Goods("三国",32);
		arr[1]=new Goods("水浒",44);
		arr[2]=new Goods("红楼", 13);
		arr[3]=new Goods("西游", 100);
		Arrays.sort(arr);
		System.out.println(Arrays.toString(arr));
		//[name:红楼 price:13, name:三国 price:32, name:水浒 price:44, name:西游 price:100]

	}
}

class Goods implements Comparable{
	String name;
	int price;
	
	Goods(String name,int price){
		this.name=name;
		this.price=price;
	}
	
	@Override
	public String toString() {
		
		return "name:"+this.name+" price:"+this.price;
	}
	@Override
	public int compareTo(Object o) {
		if(o instanceof Goods){
			Goods goods=(Goods) o;
			if(this.price>goods.price) return 1;
			else if(this.price<goods.price) return -1;
			else return 0;
		}
		throw new RuntimeException("输入数据类型不一致!");
	}
}

在这里插入图片描述

实例:
public class Demo4 {
	public static void main(String[] args) throws ParseException {
		//对自定义类进行排序比较
		Goods[] arr=new Goods[4];
		arr[0]=new Goods("三国",32);
		arr[1]=new Goods("水浒",44);
		arr[2]=new Goods("红楼", 13);
		arr[3]=new Goods("西游", 100);
		System.out.println(Arrays.toString(arr));
		//[name:三国 price:32, name:水浒 price:44, name:红楼 price:13, name:西游 price:100]
		//常见Comparator对象,重写compare对象
		Arrays.sort(arr,new Comparator() {
			
			@Override
			public int compare(Object o1, Object o2) {
				Goods goods1=(Goods) o1;
				Goods goods2=(Goods) o2;
				if(goods1.price>goods2.price) return 1;
				else if(goods1.price<goods2.price) return -1;
				else return 0;
			}
		});
		System.out.println(Arrays.toString(arr));
		//[name:红楼 price:13, name:三国 price:32, name:水浒 price:44, name:西游 price:100]

	}
}

其他常用类

在这里插入图片描述

在这里插入图片描述

实例:
public class Demo4 {
	public static void main(String[] args) throws ParseException {
		String javaVersion = System.getProperty("java.version");
		System.out.println("java的version:" + javaVersion);
		String javaHome = System.getProperty("java.home");
		System.out.println("java的home:" + javaHome);
		String osName = System.getProperty("os.name");
		System.out.println("os的name:" + osName);
		String osVersion = System.getProperty("os.version");
		System.out.println("os的version:" + osVersion);
		String userName = System.getProperty("user.name");
		System.out.println("user的name:" + userName);
		String userHome = System.getProperty("user.home");
		System.out.println("user的home:" + userHome);
		String userDir = System.getProperty("user.dir");
		System.out.println("user的dir:" + userDir);
		/*
		 * 运行结果:
		 * 	java的version:1.8.0_131
			java的home:D:\ProgramFile\java_tools\JDK8\jre
			os的name:Windows 10
			os的version:10.0
			user的name:Admin
			user的home:C:\Users\Admin 
			user的dir:F:\Eclipse_workspace\javaTutorial
		 */

	}
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值