1.字符串相关类

String类及常用方法

  1. String声明为final的,不可被继承
  2. String实现了
    1. Serializable接口:表示字符串是支持序列化的
    2. Comparable接口:表示String可以比较大小
  3. String内部定义了final char[] value用于储存字符串数据
  4. String代表不可变的字符序列->不可变性

    String对象的创建

  1. String str = "hello";
  2. String s1 = new String();
  3. String s2 = new String(String val);
  4. String s3 = new String(char[] val);
  5. String s4 = new String(char[] a, int startIndex, int count);
  6. String s5 = new String(int[] data); // ASCII码转字符

String内存解析

  1. String h1="Hello", w1="World"; // 变量
  2. final String h2="Hello", w2="World"; // 常量
  3. String s1 = "HelloWorld"; //会存储在常量池中,后续再调用也是同一个地址
  4. String s2 = "Hello" + "World"; // 常量+常量,编译期会自动合并两个,常量池中
  5. String s3 = h1 + w1; // 变量+变量,在堆中创建
  6. String s4 = h2 + w2; // 常量+常量,在常量池中
  7. String s5 = h2 + "World"; // 常量+常量,在常量池中
  8. String s6 = h1 + w2; // 变量+常量,在堆中创建
  9. String s7 = (h1 + w2).intern(); // intern中内容强行存入常量池中
  10. String s8 = new String("HelloWorld"); // 在堆中创建

String常用类

  1. int length();
  2. // 返回字符串的长度:return value.length
  3. char charAt(int index);
  4. // 返回某索引处的字符:return value[index]
  5. boolean isEmpty();
  6. // 判断是否是空字符串:return value.length == 0
  7. String toLowerCase();
  8. // 使用默认语言环境,将 String 中的所有字符转换为小写
  9. String toUpperCase();
  10. // 使用默认语言环境,将 String 中的所有字符转换为大写
  11. String trim();
  12. // 返回字符串的副本,忽略前导空白和尾部空白
  13. boolean equals(Object obj);
  14. // 比较字符串的内容是否相同
  15. boolean equalsIgnoreCase(String anotherString);
  16. // 与equals方法类似,忽略大小写
  17. String concat(String str);
  18. // 将指定字符串连接到此字符串的结尾。 等价于用“+”
  19. int compareTo(String anotherString);
  20. // 比较两个字符串的大小
  21. String substring(int beginIndex);
  22. // 返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
  23. String substring(int beginIndex, int endIndex);
  24. // 返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
  25. boolean endsWith(String suffix);
  26. // 测试此字符串是否以指定的后缀结束
  27. boolean startsWith(String prefix);
  28. // 测试此字符串是否以指定的前缀开始
  29. boolean startsWith(String prefix, int toffset);
  30. // 测试此字符串从指定索引开始的子字符串是否以指定前缀开始
  31. boolean contains(CharSequence s);
  32. // 当且仅当此字符串包含指定的 char 值序列时,返回 true
  33. int indexOf(String str);
  34. // 返回指定子字符串在此字符串中第一次出现处的索引
  35. int indexOf(String str, int fromIndex);
  36. // 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始
  37. int lastIndexOf(String str);
  38. // 返回指定子字符串在此字符串中最右边出现处的索引
  39. int lastIndexOf(String str, int fromIndex);
  40. // 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
  41. String replace(char oldChar, char newChar);
  42. // 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
  43. String replace(CharSequence target, CharSequence replacement);
  44. // 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
  45. String replaceAll(String regex, String replacement);
  46. // 使用给定的replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
  47. String replaceFirst(String regex, String replacement);
  48. // 使用给定的replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
  49. String[] split(String regex);
  50. // 根据给定正则表达式的匹配拆分此字符串。
  51. String[] split(String regex, int limit);
  52. // 根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。
  53. boolean matches(String regex);
  54. // 告知此字符串是否匹配给定的正则表达式。
  55. // 编码问题
  56. byte[] getBytes();
  57. // 使用默认编码集进行转换byte数组
  58. byte[] getBytes(String charsetName); // GBK、utf8
  59. // 使用指定编码集进行转换byte数组
  60. String new String(byte[] data, String charsetName);
  61. // byte数组解码
  62. // char数组返回字符串
  63. String String.copyValueOf(char[] data);
  64. String String.copyValueOf(char[] data, int offset, int count); // 开头+长度
  65. String String.valueOf(char[] data);
  66. String String.valueOf(char[] data, int offset, int count);

使用案例

  1. String str.replaceAll("//d", "");// 正则去除数字
  2. String str.replaceAll("^,|,$", "");// 去除开头或结尾的逗号(,)
  3. boolean str.matches("\\d+"); // 判断字符是否全部有数字组成
  4. boolean result = tel.matches("0571-\\d{7,8}"); // 判断是否是杭州的固定电话
  5. String[] str.split(" "); //以空格进行切分字符串
  6. String[] str.split("\\."); //以点进行切分字符串

正则匹配

匹配格式 匹配说明
字符类
[abc] a、b、c
[^abc] 除a、b、c外的字符
[a-zA-Z] [a-z]或[A-Z]的字符
预定类字符类
. 匹配所有(行结束符肯能匹配不到)
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
POSIX字符类(仅US-ASCII)
\p{Lower} 小写字母字符:[a-z]
\p{Upper} 大写字母字符:[A-Z]
\p{ASCII} 所有 ASCII:[\x00-\x7F]
\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]
\p{Digit} 十进制数字:[0-9]
\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]
\p{Punct} !”#$%&’()*+,-./:;<=>?@[]^_`{|}~
\p{Blank} 空格或制表符:[ \t]
边界匹配器
^ 行开头
$ 行结尾
Greedy 数量词
x? X,一次或一次也没有
x* X,零次或多次
x+ X,一次或多次
x{n} X,恰好 n 次
x{n,} X,至少 n 次
x{n,m} X,至少 n 次,但是不超过 m 次
Logical 运算符
XY X 后跟 Y
X | Y X 或 Y
(x) X,作为捕获组
特殊构造(非捕获)
(?:X) X,作为非捕获组
(?=X) X,通过零宽度的正 lookahead
(?!X) X,通过零宽度的负 lookahead
(?<=X) X,通过零宽度的正 lookbehind
(?<!X) X,通过零宽度的负 lookbehind
(?>X) X,作为独立的非捕获组

常见正则

  1. 验证用户名和密码,要求第一个字必须为字母,一共6~16位字母数字下划线组成:
  2. (^[a-zA-Z]\w{5,15}$)
  3. 验证电话号码:xxx/xxxx-xxxxxxx/xxxxxxxx
  4. (^(\d{3,4}-)\d{7,8}$)
  5. 验证手机号码:
  6. ( ^(13[0-9]|14[5|7]15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$ )
  7. 验证身份证号:
  8. (^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)
  9. 验证Email地址:
  10. (^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$)
  11. 只能输入由数字和26个英文字母组成的字符串:
  12. (^[A-Za-z0-9]+$)
  13. 整数或者小数:
  14. (^[0-9]+(\.\[0-9\]+){0,1}$)
  15. 中文字符的正则表达式:
  16. ([\u4e00-\u9fa5])
  17. 金额校验(非零开头的最多带两位小数的数字):
  18. (^(\[1-9\][0-9]*)+(.[0-9]{1,2})?$)
  19. IPV4地址:
  20. (((\\d{1,2})|(1\\d{1,2})|(2[0-4]\\d)|(25[0-5]))\\.){3}((\\d{1,2})|(1\\d{1,2})|(2[0-4]\\d)|(25[0-5]))

AbstractStringBuilder

StringBuilder、StringBuffer的继承对象,它们的接口完全一致

  1. sb -> StringBuilder
  2. StringBuilder append(xx);
  3. // 链式编程、拼接(改变原数组并返回数组)
  4. StringBuilder insert(int index, xx);
  5. // 在index位置插入元素(改变原数组并返回数组)
  6. StringBuilder deleteCharAt(int index);
  7. // 删除index位置的元素(改变原数组并返回数组)
  8. StringBuilder delete(int start, int end);
  9. // 删除[start, end)的值(改变原数组并返回数组)
  10. void serCharAt(int index, xx);
  11. // 替换index位置的字符
  12. StringBuffer reverse();
  13. // 字符串反转
  14. void setLength(int newLength);
  15. // 设置当前字符序列长度为newLength
  16. StringBuffer replace(int start, int end, String str);
  17. // 替换[start, end)的字符序列为str
  18. int indexOf(String str);
  19. // 查询str第一次出现的下标
  20. int indexOf(String str, int fromIndex);
  21. // 查询从[fromIndex,最后]出现的下标
  22. int lastIndexOf(String str);
  23. // 查询最后一次出现的下标
  24. int lastIndexOf(String str, int fromIndex);
  25. // 查询从[fromIndex,最后]最后一次出现的下标
  26. String substring(int start);
  27. // 截取当前字符序列[start,最后]并返回
  28. String substring(int start, int end);
  29. // 截取当前字符序列[start,en)并返回
  30. String toString();
  31. // 当前序列以字符串返回
  32. int length();
  33. // 返回长度(字符串数)
  34. int capacity();
  35. // 返回当前容量
  36. int codePointAt(int index);
  37. // 返回索引位置的ascii码值
  38. // StringBuffer和String的互换
  39. String str = builderStr.toString();
  40. StringBuilder str = new StringBuilder(str);

StringBuffer

面试题1:String、StringBuffer、StringBuilder的区别

  • String:
    • 不可变的字符序列;
    • 底层使用final的char型数组
  • StringBuffer:
    • 底层使用char型数组,可变
    • 可变的 字符序列;线程安全的(它方法有synchronized),效率低
  • StringBuilder:
    • 底层使用char型数组,可变
    • jdk5新增,线程不安全,效率高

面试题2:为什么字符串的length()和数组的length不同

  • 字符串的length()是方法、数组的length是属性/常量

为什么字符串使用的是方法?

  • 因为字符串底层就是使用char型数组实现的,
  • 而数组里就有length属性,通过内部数组调用length属性即可,无需再创建一个属性

2. 数组类

Array

  1. Object Arrary.get(Object arr, int index); // 返回位置的值
  2. Array.copy(E[] e,newLength); // 扩容

Arrays

  1. //java.util.Arrays
  2. Object Arrays.copyOf();
  3. boolean equals(int[] a, int[] b);// judge tow arrays is euals
  4. String toString(int[] a); //print array info
  5. void fill(int[] a, int val); //将指定值填充到数组中
  6. void sort(int[] a); //sort the array
  7. int binarySearch(int[] a, int key); // binary find
  8. int[] copyOf(int[] original, int newLength); //copy array
  9. List<T> asList(T...a); // 生成不可变的Listmap

3.JDK8之前的时期时间API

Date类

  1. import java.util.Date;
  2. Date date = new Date();
  3. // 当前系统时间
  4. new Date(long);
  5. // 毫秒值转时间对象
  6. long getTime();
  7. // 距离1970-1-1的毫秒值
  8. // 不推荐使用
  9. int getYear(); //年 今年-1990
  10. int getMonth(); //月 [0,11]
  11. int getDay(); //星期 [0,6] 0是星期日、1是星期一...
  12. int getHours(); //时 [0,23]
  13. int getMinutes();//分 [0,59]
  14. int getSeconds();//秒 [0,59]

Calendar类 -> 日期类

  1. import java.util.Calendar;
  2. Calendar c = Calendar.getInstance();
  3. // 获取Calendar的对象
  4. get(常量);
  5. Calendar.YEAR
  6. // 获取年
  7. Calendar.MONDAY
  8. // 获取月[0-11]
  9. Calendar.DATE
  10. // 获取日[1-31]
  11. Calendar.HOUR
  12. // 获取时[1-12]
  13. Calendar.MINUTE
  14. // 获取分[1-60]
  15. Calendar.SECOND
  16. // 获取秒
  17. Calendar.ZONE_OFFSET
  18. // 获取毫秒

SimpleDateFormat类

格式化:日期 -> 文本 解析:文本 -> 日期

  1. import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3. // 格式化日期对象 转 文本日期
  4. Date date = new Date();
  5. // 创建当前对象
  6. SimpleDateFormat format0 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
  7. // 创建格式化字符规则
  8. String time = format0.format(date.getTime());
  9. // 生成指定时间字符串
  10. // 解析文本日期 转 日期对象
  11. SimpleDateFormat format1 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
  12. // 创建格式化字符规则
  13. Date date1 = format1.parse("2022年03月06日 11时47分48秒");
  14. // 解析文本生成日期对象

yyyy:年 MM:月 dd:日 hh:1~12小时制(1-12) HH:24小时制(0-23) mm:分 ss:秒 S:毫秒 E:星期几 D:一年中的第几天 F:一月中的第几个星期(会把这个月总共过的天数除以7) w:一年中的第几个星期 W:一月中的第几星期(会根据实际情况来算) a:上下午标识 k:和HH差不多,表示一天24小时制(1-24)。 K:和hh差不多,表示一天12小时制(0-11)。 z:表示时区

image.png

4.JDK8中新时期时间API

Date类被弃用,Date面临的问题

  • Date中年份以1900年开始、月从0开始、日从1开始
    • 容易导致开发人员混淆
  • Date和SimpleDateFormat它们是线程不安全的
    • 时间处理开发中并发会有潜在安全问题
  • 没有时区的组件、在DateFormat中更好的处理日期格式、无法使用非公历日期

TemporalAdjusters类->时间调整器

LocalDate的时间调整器

  1. import java.time.temporal.TemporalAdjusters;
  2. import java.time.DayOfWeek;
  3. TemporalAdjusters.dayOfWeekInMonth();
  4. // 一周中的某一天,例如,三月中第二个星期二
  5. TemporalAdjusters.firstDayOfMonth();
  6. // 当前月的第一天
  7. TemporalAdjusters.firstDayOfNextMonth();
  8. // 下一个月的第一天
  9. TemporalAdjusters.firstDayOfNextYear();
  10. // 下一年的第一天
  11. TemporalAdjusters.firstDayOfYear();
  12. // 当年的第一天
  13. TemporalAdjusters.lastDayOfMonth();
  14. // 当月的最后一天
  15. TemporalAdjusters.nextOrSame();
  16. // 下一次或当天发生的一周中的某天

LocalDate->对年月日做出处理

LocalTime->对时分秒纳秒做出处理

LoaclDateTime->同时可以处理年月日时分秒

  1. import java.time.LocalDate;
  2. import java.time.LocalTime;
  3. import java.time.LocalDateTime;
  4. // LocalDate、LocalTime、LocalDateTime他们的共同接口为Temporal
  5. // 这使用Temporal来代替
  6. Temporal now(); Temporal now(Zooeld zooe);
  7. // 获取系统时间对象
  8. Temporal of(Y,M,D,H,M,S,N);
  9. // 自定义时间对象
  10. // datetime(年、月、日、时、分、秒、毫秒)
  11. // date (年、月、日)
  12. // time (时、分、秒、毫秒)
  13. String toString();
  14. // datetime (年-月-日T时:分:秒.毫秒)
  15. // date (年-月-日)
  16. // time(时:分:秒.毫秒)
  17. long toInstant(ZoneOffset.of("+8")).toEpochMilli();
  18. // 获取时间戳
  19. int getYear();
  20. // 获取年[2022]
  21. Month getMonth();
  22. // 获取月对象
  23. int getMonthValue(); int getMonth().getValue();
  24. // 获取月值[1-12]
  25. String getMonth().toString();
  26. // 获取月英语
  27. int getDayOfWeek().getValue();
  28. // 今天是星期几、[星期一,星期日],[1,7]
  29. String getDayOfWeek().toString();
  30. // 今天星期的英语单词
  31. int getDayOfMonth();
  32. // 今天是几号 [1-31]
  33. int getDayOfYear();
  34. // 今天是今年的第几天
  35. int getHour();
  36. // 获取小时
  37. int getMinute();
  38. // 获取分钟
  39. int getSecond();
  40. // 获取秒
  41. Temporal withYear(); Temporal withMonth(); Temporal withDayOfYear(); Temporal withDayOfMonth();
  42. // 修改年;修改月;修改年份天数;修改月份天数(修改并返回对象)
  43. Temporal with(TemporalAdjusters t);
  44. // 使用时间调整器进行修改时间(修改并返回对象)
  45. Temporal plusDays(); Temporal plusWeeks(); Temporal plusMonths(); Temporal plusYears(); Temporal plusHours();
  46. // 当前对象添加几天、几周、几月、几年、几小时(修改并返回对象)
  47. Temporal minusDays(); Temporal minusWeeks(); Temporal minusMonths(); Temporal minusYears(); Temporal minusHours();
  48. // 当前对象减少几天、几周、几月、几年、几小时
  49. Temporal plus(TemporalAdjusters t); Temporal minus(TemporalAdjusters t);
  50. // 使用时间调整器进行添加和修改时间
  51. boolean isBefore(Temporal b); boolean isAfter(Temporal b);
  52. // 两个时间对象进行对比(a<b?true:false);(a>b?true:false)
  53. boolean isLeapYear();
  54. // 判断是否是闰年
  55. Temporal parse("2022-03-04");
  56. // 根据字符串获取,严格按照yyyy-MM-dd来验证(04不能写成4)
  57. Temporal with(TemporalAdjusters.firstDayOfMonth());
  58. // 获取本月第一天的日期(2022-03-01)
  59. Temporal with(TemporalAdjusters.lastDayOfMonth());
  60. // 获取本月最后一天的日期(2022-03-31)
  61. Temporal with(TemporalAdjusters.firstDayOfNextMoth());
  62. // 获取下一个月的第一天
  63. Temporal Temporal.parse("2022-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
  64. Temporal Temporal.now().with(TemporalAdjusters.firstDayOfYear()).
  65. with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
  66. // 获取今年的第一个星期一

LocalDate、LocalTime、LocalDateTime的区别? 相同点:三者的创建、方法都有共同之处 不同点: LocalDate只对日期进行处理 LocalTime只对时间进行处理 LocalDateTime可以处理日期和时间

ZonedDateTime->时区信息类、Zone的时区类

ZonedDateTime同样拥有LocalDateTime的方法

  1. import java.time.ZoneId;
  2. import java.time.ZonedDateTime;
  3. ZoedDateTime ZoedDateTime.now();
  4. // 获取带有时区的时间对象
  5. ZoedDateTime ZoedDateTime.now(ZoneId.of("America/New_York"));
  6. now(ZoneId.of("UTC")); // 标准时区
  7. new(ZoneId.of("GMT")); // 格林威治时区;GMT(+0)、GMT+8(+8)
  8. // 获取并修改时区的时间对象
  9. ZoedDateTime ZoedDateTime.now(ZoneId.of());
  10. ZoneId getZone();
  11. // 获取时区
  1. 时区 协调时区 位置、国家、城市
  2. Asia/Harbin UTC+8 亚洲 / 中国 / 哈尔滨
  3. Asia/Shanghai UTC+8 亚洲 / 中国 / 上海 // 默认时区
  4. Asia/Chungking UTC+8 亚洲 / 中国 / 重庆
  5. Asia/Urumqi UTC+6 亚洲 / 中国 / 乌鲁木齐
  6. Asia/Kashgar UTC+6 亚洲 / 中国 / 喀什地区
  7. Asia/Macao CST 亚洲 / 中国 / 澳门
  8. Asia/Hong_Kong HKT 亚洲 / 中国 / 香港
  9. Asia/Taipei CST 亚洲 / 中国 / 台湾台北
  10. Asia/Seoul KST 亚洲 / 韩国 / 首尔
  11. Asia/Tokyo JST 亚洲 / 日本 / 东京
  12. Asia/Singapore +08 亚洲 / 新加坡 / 新加坡
  13. Asia/Saigon +07 亚洲 / 越南 / 西贡
  14. Asia/Bangkok +07 亚洲 / 泰国 / 曼谷
  15. Asia/Phnom_Penh +07 亚洲 / 柬埔寨 / Phnom_Penh
  16. Asia/Dubai +04 亚洲 / 阿拉伯联合酋长国 / 迪拜
  17. America/New_York EDT 美洲 / 美国 / 纽约
  18. America/Cayman EST 美洲 / 开曼群岛 / 开曼
  19. Europe/Zurich CEST 欧洲 / 瑞士 / 苏黎世
  20. Europe/Berlin CEST 欧洲 / 德国 / 柏林
  21. Europe/Paris CEST 欧洲 / 法国 / 巴黎
  22. Europe/London BST 欧洲 / 英国 / 伦敦
  23. Europe/Athens EEST 欧洲 / 希腊 / 雅典
  24. Europe/Rome CEST 欧洲 / 意大利 / 罗马
  25. Australia/Sydney AEST 澳大利亚 / 悉尼
  26. Africa/Cairo EET 非洲 / 埃及 / 开罗
  27. Africa/Johannesburg SAST 非洲 / 南非 / 约翰内斯堡

Period->日期间隔类

  1. import java.time.Period;
  2. // 用于计算两个日期的间隔
  3. LocalDate t1 = LocalDate.now();
  4. LocalDate t2 = LocalDate.of(2020, 5, 5);
  5. Period b = Period.between(t2, t1);
  6. int b.getYears();
  7. // 间隔年
  8. int b.getMonths();
  9. // 间隔月
  10. int b.getDays();
  11. // 间隔日
  12. long b.toTotalMonths();
  13. // 总共间隔月份(隔年*12 + 隔月)

Duration->时间间隔类

  1. import java.time.Duration;
  2. // 计算两个时间的间隔
  3. LocalDateTime t1 = LocalDateTime.now();
  4. LocalDateTime t2 = LocalDateTime.of(2018, 12, 31, 0, 0, 0);
  5. Duration d = Duration.between(t2, t1);
  6. long d.toDays();
  7. // 总天数
  8. long d.toHours();
  9. // 总小时
  10. long d.toMinutes();
  11. // 总分钟

DateTimeFormatter

  1. import java.time.format.DateTimeFormatter;
  2. // 预定义的标准格式,toString()就是标准格式
  3. // 2022-03-06T21:59:39.419
  4. DateTimeFormatter ISO_DATE_TIME;
  5. // 本地化相关的格式1
  6. // 2022年3月6日 下午09时59分39秒
  7. DateTimeFormatter ofLocalizedDateTime(FormatStyle.LONG);
  8. // 本地化相关的格式2
  9. // 22-3-6 下午9:59
  10. DateTimeFormatter ofLocalizedDateTime(FormatStyle.SHORT);
  11. // 自定义的格式
  12. // 2022年03月06日 21时59分39秒419毫秒星期日是这年的65天
  13. DateTimeFormatter ofPattern("yyyy年MM月dd日 HH时mm分ss秒SSS毫秒E是这年的D天");
  14. // 格式化时间对象转文本,标准写法
  15. LocalDateTime now = LocalDateTime.now();
  16. DateTimeFormatter df = DateTimeFormatter.ISO_DATE_TIME;
  17. System.out.println(df.format(now));
  18. // 解析文本转时间对象,标准写法
  19. String str = "2022-03-06T21:59:39.419";
  20. DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE_TIME;
  21. LocalDateTime dt = LocalDateTime.parse(str, dtf);

Instant

5.Java比较器

Comparable接口

Comparator接口

6.数学相关类

Math类,包含基本数学运算方法

  1. double PI;
  2. //返回圆周率
  3. double ceil(double a);
  4. // 向上取整
  5. double floor(double a);
  6. // 向下取整
  7. int round(float a);
  8. // 四舍五入
  9. int abs(int a);
  10. // 绝对值
  11. double pow(double a, double b);
  12. //a的b次方
  13. double sqrt(double a);
  14. // 平方根
  15. int max(int a, int b);
  16. // 最大值
  17. int min(int a, int b);
  18. //最小值
  19. double log(double a);
  20. // 自然对数
  21. double random();
  22. // 产生 0-1的随机数
  23. random()*90+10; // 10-99的随机数
  24. random()*6+1;// 1-7的随机数
  25. random()*10; //0-9的随机数

Random随机类

  1. import java.util.Random;
  2. 00 new Random();
  3. // 创建随机数生成器
  4. new Random(long seed);
  5. // 使用long种子创建一个新的随机数生成器
  6. // 种子相同生成的随机数相同(这是生成器,重复调用,随机数相同)
  7. boolean nextBoolean();
  8. // 返回随机布尔值
  9. vode nextBytes(byte[] bytes);
  10. // 生成随机字节,并覆盖bytes的数组(含正数、负数、0)[-128,127]
  11. double nextDouble();
  12. // 生成[0,1)之间的16-17位小数
  13. float nextFloat();
  14. // 生成[0,1)之间的6-8位小数
  15. double nextGaussian();
  16. // 呈高斯(正态)分布的double值,平均值是0,标准误差是1
  17. int nextInt();
  18. // 返回均匀分布的int值
  19. int nextInt(int n);
  20. // 返回均匀分布[0,n)的int值
  21. long nextLong();
  22. // 返回均匀分布的Long值

BigInteger:用于表示任意超大的整数

底层使用字符串存储,用特殊的运算规则来模拟整数类型

  1. BigInteger b1 = new BigInteger("12345648674896486");
  2. BigInteger b2 = new BigInteger("12345648674896486");
  3. b1.add(b2); //相加
  4. b1.subtract(b2); // 相减
  5. BigInteger abs() 返回大整数的绝对值
  6. BigInteger add(BigInteger val) 返回两个大整数的和
  7. BigInteger and(BigInteger val) 返回两个大整数的按位与的结果
  8. BigInteger andNot(BigInteger val) 返回两个大整数与非的结果
  9. BigInteger divide(BigInteger val) 返回两个大整数的商
  10. double doubleValue() 返回大整数的double类型的值
  11. float floatValue() 返回大整数的float类型的值
  12. BigInteger gcd(BigInteger val) 返回大整数的最大公约数
  13. int intValue() 返回大整数的整型值
  14. long longValue() 返回大整数的long型值
  15. BigInteger max(BigInteger val) 返回两个大整数的最大者
  16. BigInteger min(BigInteger val) 返回两个大整数的最小者
  17. BigInteger mod(BigInteger val) 用当前大整数对val求模
  18. BigInteger multiply(BigInteger val) 返回两个大整数的积
  19. BigInteger negate() 返回当前大整数的相反数
  20. BigInteger not() 返回当前大整数的非
  21. BigInteger or(BigInteger val) 返回两个大整数的按位或
  22. BigInteger pow(int exponent) 返回当前大整数的exponent次方
  23. BigInteger remainder(BigInteger val) 返回当前大整数除以val的余数
  24. BigInteger leftShift(int n) 将当前大整数左移n位后返回
  25. BigInteger rightShift(int n) 将当前大整数右移n位后返回
  26. BigInteger subtract(BigInteger val)返回两个大整数相减的结果
  27. byte[] toByteArray(BigInteger val)将大整数转换成二进制反码保存在byte数组中
  28. String toString() 将当前大整数转换成十进制的字符串形式
  29. BigInteger xor(BigInteger val) 返回两个大整数的异或

BigDecimal:用来对超过16位有效位的数进行精确的运算

  1. 2、构造器描述
  2. BigDecimal(int) 创建一个具有参数所指定整数值的对象。
  3. BigDecimal(double) 创建一个具有参数所指定双精度值的对象。 //不推荐使用
  4. BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
  5. BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。//推荐使用
  6. 3、方法描述
  7. BigInteger add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
  8. BigInteger subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
  9. BigInteger multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
  10. BigInteger divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
  11. String toString() BigDecimal对象的数值转换成字符串。
  12. double doubleValue() BigDecimal对象中的值以双精度数返回。
  13. float floatValue() BigDecimal对象中的值以单精度数返回。
  14. long longValue() BigDecimal对象中的值以长整数返回。
  15. int intValue() BigDecimal对象中的值以整数返回。

6.系统类

System

  1. void System.arraycopy(obj[] arr1int index1, arr2, int index2, int length);
  2. // array拷贝(原数组, 原数组开始位置, 目标数组, 目标数组位置, 拷贝数量)
  3. long System.currentTimeMillis();
  4. // 获取时间戳
  5. void System.exit(0);
  6. // 终止程序
  7. void System.gc();
  8. // 通知垃圾回收器回收垃圾,回收释放对象占用的内存
  9. String System.getProperty("user.name");
  10. // 获取系统环境变量值
  11. Properties p = System.getProperties();
  12. for(Object o:p.keySet()){
  13. Object v = p.get(o);
  14. System.out.println(o + "---->" + v);}
  15. // 获取所有的系统变量信息

Runtime

Runtion运行时类,每个java程序,在运行期间都会有一个Runtime类实例,用于连接运行环境 Runtion类它是单例模式设计的(饿汉式)

  1. Runtime rt = Runtime.getRuntime();
  2. // 获取Runtime类实例
  3. void System.exit(0);
  4. // 终止程序
  5. void System.gc();
  6. // 通知垃圾回收器回收垃圾,回收释放对象占用的内存
  7. Process exec("notepad");
  8. // 使用系统cmd命令
  9. // notepad记事本、calc计算器、mspaint画图板
  10. long totalMemory();
  11. // Java虚拟机中的内存总量
  12. long freeMemory();
  13. // Java虚拟机中的空闲内存量,gc可能释放内存
  14. long maxMemory();
  15. // java虚拟机试图使用的最大内存量