常用工具类
StringBuffer、StringBuilder
带有缓冲区的字符串对象,可以理解为这个对象拥有自己的存储数据的空间,在进行赋值时是将数据复制到自己的空间中进行操作,所以在方法执行后会修改自己本身的数据
效率更快,避免了过多字符串常量垃圾对象的产生 前者用于生成字符串,后者用于表示字符串 后为常量,前是“可变化的量”
StringBuffer() 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
StringBuffer(int capacity) 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer(String str) 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
// StringBuffer()
// 构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
// StringBuffer存在缓冲区所以需要创建时指定缓冲区大小如果没有指定默认16个字符大小
StringBuffer sb1=new StringBuffer();//创建一个空字符串 默认缓冲大小16
System.out.println(sb1);
// StringBuffer(int capacity)
// 构造一个不带字符,但具有指定初始容量的字符串缓冲区。
StringBuffer sb2=new StringBuffer(20);//创建一个空字符串 默认缓冲大小20
System.out.println(sb2);
// StringBuffer(String str)
// 构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。
StringBuffer sb3=new StringBuffer("abc");//以指定字符串创建StringBuffer对象长度由字符串决定
System.out.println(sb3);
主要方法
添加&删除:
public StringBuffer insert(int offset, boolean b)及其重载方法
public StringBuffer delete(int start, int end)
String存储的是字符串常量不允许更改,方法会返回新的字符串。
StringBuffer、StringBuilder带有字符串缓冲区,操作字符串的过程在本身缓冲区内进行,所以大部分方法会直接修改本身。
StringBuilder线程不安全、StringBuffer线程安全
效率上比较
StringBuilder>StringBuffer>String
使用频率比较
String>StringBuffer>StringBuilder
使用场景
当仅仅声明字符串进行判断操作时(进行较少的修改)使用String
Math
数学类,提供数学中相应的公式以及常量。
这个类构造方法私有,所以不能创建对象,但是提供的方法都为static
常用方法
public static int abs(int a)
public static double ceil(double a)
public static double floor(double a)
public static int max/min(int a,int b)
public static double pow(double a,double b)
public static double random()
public static int round(float a)
System.out.println(Math.PI);//PI
System.out.println(Math.abs(-1000));//绝对值
System.out.println(Math.ceil(3.1));//向上取整
System.out.println(Math.floor(3.5));//向下取整
System.out.println(Math.round(3.14));//四舍五入
System.out.println(Math.log10(100));//以10为底指定数值的对数
System.out.println(Math.pow(3, 5));//第一个数的第二个数的次方
System.out.println((int)(Math.random()*10+1));//随机生成0~1之间的小数
包装类均位于java.lang包,使用时不需要导入,系统自动导入。 Java中的8个包装类分别是:Byte,Short,Integer,Long,Float,Double,Character,Boolean它们的使用方式都是一样的,可以实现原生数据类型与包装类型的双向转换。
// 基本数据类、包装类、String字符串之间相互转换
// 基本数据类型转换为包装类
int i = 123;
// 1使用Integer构造方法转换
Integer integer = new Integer(i);// 使用指定数据创建integer对象
// 2自动装箱
// jdk1.5版本以后基本数据类型与对应包装类可以自动转换
integer = i;
// 3使用Integer静态方法形式将基本数据类型转换为包装类
integer = Integer.valueOf(i);
// 包装类转换为基本数据类型
// 1自动拆箱
// jdk1.5版本以后基本数据类型与对应包装类可以自动转换
i = integer;
// 2使用包装类方法进行转换//
i = integer.intValue();
// 包装类与String之间的转换
// 1使用object继承的toString方法
String str = integer.toString();
// 2使用字符串拼接+ 将其自动转换为字符串(本质上还是调用toString)
str = integer + "";
// 使用String静态方法
str = String.valueOf(integer);
// String转换为包装类
// 1使用包装类构造方法
integer = new Integer(str);
// 2使用包装类静态方法
// 需要保证字符串为数字字符串
integer = Integer.valueOf(str);
// 任意基本类型转换为string
// 1使用String静态方法
str = String.valueOf(i);
// 2使用字符串拼接的形式换行
str = "" + i;
//string转换为基本数据类型需要使用包装类
自动装箱:把基本类型转换为包装类类型 int基本类型可以直接赋值给包装类对象
自动拆箱:把包装类类型转换为基本类型 包装类对象可以直接与基本类型进行计算 直接计算时需要进行滤空操作
// isDigit(char ch)
// 确定指定字符是否为数字。
char c='a';
System.out.println(c);
System.out.println("是否是数字:"+Character.isDigit(c));
// isLetter(char ch)
// 确定指定字符是否为字母。
System.out.println("是否是字母:"+Character.isLetter(c));
// isLetterOrDigit(char ch)
// 确定指定字符是否为字母或数字。
System.out.println("是否是字母或数字:"+Character.isLetterOrDigit(c));
// isLowerCase(char ch)
// 确定指定字符是否为小写字母。
System.out.println("是否是小写字母:"+Character.isLowerCase(c));
// isUpperCase(char ch)
// 确定指定字符是否为大写字母。
System.out.println("是否是大写字母:"+Character.isUpperCase(c));
// toLowerCase(char ch)
// 使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为小写。
System.out.println("转换为小写字母:"+Character.toLowerCase(c));
// toUpperCase(char ch)
// 使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为大写。
System.out.println("转换为大写字母:"+Character.toUpperCase(c));
构造方法
将 BigInteger 的十进制字符串表示形式转换为 BigInteger。
BigDecimal(String val) 将 BigDecimal 的字符串表示形式转换为 BigDecimal。
BigInteger bi1=new BigInteger("2");
BigInteger bi2=new BigInteger("222222222222222222222222222222222222222222222222222222");
//加法
System.out.println(bi1.add(bi2));
//减法
System.out.println(bi1.subtract(bi2));
//乘法
System.out.println(bi1.multiply(bi2));
//除法
System.out.println(bi1.divide(bi2));
//平方
System.out.println(bi1.pow(2));
BigDecimal bd1=new BigDecimal("1561.654684641651441418418748484864864486648415657164684646466464646164654641646546464644");
BigDecimal bd2=new BigDecimal("2");
//加法
System.out.println(bd1.add(bd2));
//除法
//由于保存精度除不开会报错
System.out.println(bd1.divide(bd2));
Date
日期类,java开发初期用于进行日期操作相关的工具类(现在基本有些方法已经废弃)
这个类基本方法已过时通常我们只使用其构造方法用来表示某一日期
// 日期类已被取代所有方法基本过时
// 我们只用其构造方法来表示日期
Date date = new Date();
System.out.println(date);
//返回距离1970年1月1日0点0分0秒所过毫秒数
System.out.println(date.getTime()/1000/60/60/24/365);
//以废弃方法 不建议使用但是现在仍可以执行
//现在能用但是在下一个版本可能就不能用
System.out.println(date.getYear()+1900);
System.out.println(date.getMonth()+1);
System.out.println(date.getDate());
System.out.println(date.getDay());
主要方法
public final String format(Date date)
public Date parse(String source)
Date date=new Date();
System.out.println(date);
//2020年10月22日 03:22 PM
//2020-10-22 03:22:54 PM
//需要在创建时传入格式化模板字符串
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd kk:mm:ss a");
//使用指定模板格式化date对象转换为字符串
String format = sdf.format(date);
System.out.println(format);
//将字符串以指定模板解析为date对象
//如果字符串与模板不匹配则会报错
String str="2020-10-22 15:31:52 下午";
Date parse = sdf.parse(str);
System.out.println(parse);
日历类是一个抽象类,不能通过new关键字创建对象,所以在使用时为我们提供了静态的方法获取对象
主要方法
public static Calendar getInstance()
public int get(int field)
public void add(int field,int amount)
public final void set(int year,int month,int date)
public final Date getTime()
// 日历类
// 不能创建对象由静态方法获取对象
// 获取以保存了当前时刻的日历对象
Calendar c = Calendar.getInstance();
// 获取当前日期对象
// 返回当前日历所指代的具体日期对象
Date time = c.getTime();
System.out.println(time);
// 日历类get方法
// 日历类使用通用方法get进行属性的获取
// 日历中使用静态常量对属性进行存储
// 通过静态变量获取当前日历对象保存数据
// 获取年
System.out.println(c.get(Calendar.YEAR));
// 获取月0~11
System.out.println(c.get(Calendar.MONTH) + 1);
// 获取日
System.out.println(c.get(Calendar.DAY_OF_MONTH));
// 获取时
System.out.println(c.get(Calendar.HOUR_OF_DAY));// 24小时制
System.out.println(c.get(Calendar.HOUR));// 12小时制
// 分钟
System.out.println(c.get(Calendar.MINUTE));
// 秒
System.out.println(c.get(Calendar.SECOND));
// 毫秒
System.out.println(c.get(Calendar.MILLISECOND));
// 当前日期在本周第几天周日是第一天
System.out.println(c.get(Calendar.DAY_OF_WEEK));
// 已过天数
System.out.println(c.get(Calendar.DAY_OF_YEAR));
// 当前本月第几周
System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
// 本周是当前年第几周
System.out.println(c.get(Calendar.WEEK_OF_YEAR));
// 日历类set方法
// set是当前指向日期以指定日期替换
// 只修改某一属性值
// c.set(field, value);
c.set(Calendar.YEAR, 2020);
c.set(Calendar.DAY_OF_MONTH, 22);
// 直接修改输入年月日
// c.set(year, month, date);
// 注意月份0~11 所以输入时注意-1
c.set(2222, 1, 22);
// c.set(year, month, date, hourOfDay, minute);
c.set(2222, 1, 22, 22, 22);
// c.set(year, month, date, hourOfDay, minute, second);
c.set(2222, 1, 22, 22, 22, 22);
c = Calendar.getInstance();
// 日历类add方法
// 用于为指定字段添加数据
// c.add(field, amount);
// 为指定字段添加偏移量
// 三年后的明天是星期几
c.add(Calendar.YEAR, 3);
c.add(Calendar.DAY_OF_MONTH, 1);
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
System.out.println(c.get(Calendar.DAY_OF_WEEK));
1.书写方法将自定字符串首字母改为大写其余字母改为小写(分别使用String与Stringbuffer分别完成)
2.书写方法传入字符串统计字符串中大写字母个数、小写字母个数、其余字符个数
3.使用数学类完成科学计算器类的书写并书写相应方法
1.使用stringbuffer完成敏感词替换
2.使用StringBuilder将一个数组内内容拼写到一个字符串当中。
3.使用日历类计算任意年份有多少天
4.使用日历类计算任意月份有多少天
5.使用日历类计算2023年5月21日是当年第几周
6.使用日历类计算2023年第5周周一是几号
注意:本文归作者所有,未经作者允许,不得转载