一、引言
Oracle为Java提供了丰富的基础类库,Java 8 提供了4000多个基础类库,熟练掌握这些基础类库可以提高我们的开发效率,当然,记住所有的API是不可能也没必要的,我们可以通过API文档或直接网上搜索来逐渐熟悉大部分类的功能和方法,下面我们来学习一些基础类库。
二、
Scanner类可以很方便的获取用户的键盘输入,是一个基于正则表达式的文本扫描器,可以从文件、输入流、字符串中解析出字符串和基本类型值,构造器也是以文件、输入流、字符串为数据源进行构造,主要有两种方法:
-
hasNextXxx():是否还有下一个Xxx类型输入项。
//键盘输入 Scanner scanner = new Scanner(System.in); //回车作为分隔符 scanner.useDelimiter("\n"); while (scanner.hasNext()) { System.out.println(scanner.next()); }
默认使用空白(空格、tab空白、回车)来进行项之间的分隔符。我们也可以直接按照行来进行分隔,调用下面方法:
-
hasNextLine
-
nextLine
Scanner 还可以读取文件输入
try { Scanner scannerfile=new Scanner(new File("123.txt")); } catch (FileNotFoundException e) { e.printStackTrace(); }
三、
//键盘输入 Scanner scanner = new Scanner(System.in); //回车作为分隔符 scanner.useDelimiter("\n"); while (scanner.hasNext()) { System.out.println(scanner.next()); } try { Scanner scannerfile=new Scanner(new File("123.txt")); } catch (FileNotFoundException e) { e.printStackTrace(); }
Runtime runtime = Runtime.getRuntime(); System.out.println("处理器数量:" + runtime.availableProcessors()); System.out.println("可用最大内存数:"+runtime.maxMemory()); System.out.println("空闲内存:"+runtime.freeMemory()); System.out.println("总内存数:"+runtime.totalMemory());
四、
Object 是所有类、数组、枚举类的父类,任何类型都可以赋给Object,有以下常用的一些方法:
-
boolean equals(Object obj) 判断指定对象与该对象是否相等。
-
void finalize() 垃圾回收器调用此方法来清理对象资源。
-
Class<?> getClass() 返回该对象运行时类。
-
int hashCode() 返回该对象的hash值。
-
Object还有控制线程的几个方法,wait()、notify()、notifyAll()。
Java 7 之后新增了Objects方法,里面提供了工具方法来操作对象,这些工具方法大多是空指针安全的,使用更安全。
字符串就是一连串字符序列,Java提供了String、StringBuffer、StringBuilder 三个类进行字符串封装和处理。其中StringBuffer、StringBuilder基本相似,只是StringBuffer线程安全而StringBuilder线程不安全。
String类是不可变类,一旦创建,就不可改变,直至被销毁。String类的不可变性,后面有机会再详解。
String类提供了很多构造器:
String也提供了大量的方法来操作字符串对象,我们学习一些常用的方法:
String s = new String("abcdefg"); //获取字符串中指定位置的字符 System.out.println(s.charAt(1)); //比较字符串的大小 System.out.println(s.compareTo("adasd")); //将该字符串与str连接在一起 s.concat("higk"); System.out.println(s); //与StringBuffer对象比较,值相等则返回true System.out.println(s.contentEquals(new StringBuffer("abcd"))); //将字符数组连缀成字符串 System.out.println(String.copyValueOf(new char[]{'a', 'b'})); //将字符数组的子数组连缀成字符串 System.out.println((String.copyValueOf(new char[]{'a', 'b', 'c', 'd', 'e'}, 2, 3))); //将字符串与指定对象比较 System.out.println(s.equals("abcdefg")); //忽略大小写字符串与指定对象比较 System.out.println(s.equalsIgnoreCase("ABcdefg")); //将string对象转换成Byte数组 byte[] bytes = s.getBytes(); for (int i = 0; i < bytes.length; i++) { System.out.println(bytes[i]); } char[] s1 = new char[]{'晚', '安', '!', '世', '界'}; String s2 = new String("。!?"); //将字符串从srcBegin开始,到srcEnd结束复制到字符串数组串中,dstBegin为字符串数组的初始位置 s2.getChars(0, 2, s1, 2); for (int i = 0; i < s1.length; i++) { System.out.println(s1[i]); } //查询字符在字符串中第一次出现的位置 System.out.println(s.indexOf('b')); //查询字符在字符串中从fromIndex后第一次出现在的位置 System.out.println(s.indexOf('b', 2)); //查询子字符串在字符串中第一次出现的位置 System.out.println(s.indexOf("bc")); //查询子字符在字符串中从fromIndex后第一次出现在的位置 System.out.println(s.indexOf("bc", 2)); //查询字符在字符串中最后一次出现的位置 System.out.println(s.lastIndexOf('b')); //查询字符在字符串中从fromIndex后最后一次出现在的位置 System.out.println(s.lastIndexOf('b', 2)); //查询子字符串在字符串中最后一次出现的位置 System.out.println(s.lastIndexOf("bc")); //查询子字符在字符串中从fromIndex后最后一次出现在的位置 System.out.println(s.lastIndexOf("bc", 2)); //字符串长度 System.out.println(s.length()); //替换字符串 s.replace('a', 'b'); System.out.println(s); //对象是否以某字符串结尾 System.out.println(s.startsWith("ab")); //String 对象是以某字串结尾 System.out.println(s.endsWith("fg")); //获取从beginIndex位置开始到结束的子字符串 String substring = s.substring(4); System.out.println(substring); //获取从beginIndex位置开始到endIndex结束的子字符串 String substring1 = s.substring(4, 6); System.out.println(substring1); char[] chars = s.toCharArray(); //转换成char数组 for (int i = 0; i <chars.length ; i++) { System.out.println(chars[i]); } //将字符串转换成小写 String lowerCase = s.toLowerCase(); System.out.println(lowerCase); //将字符串转换成大写 String upperCase = s.toUpperCase(); System.out.println(upperCase);
由于String的不可变性,频繁操作String时会产生大量的临时变量,这时我们可以使用StringBuilder和StringBuffer,两个类的用户基本一致,在不需要线程安全时,建议使用StringBuilder。
StringBuilder sb=new StringBuilder(); //追加 sb.append("java"); System.out.println(sb); //插入 sb.insert(0,"hello "); System.out.println(sb); //替换 sb.replace(5,6,","); System.out.println(sb); //反转 sb.reverse(); System.out.println(sb); //长度与容量 System.out.println(sb.length()+ sb.capacity());
//返回小于目标数的最大整数 System.out.println(Math.floor(-1.57)); //返回大于目标数的最小整数 System.out.println(Math.ceil(1.57)); //四舍五入 System.out.println(Math.round(2.3)); //取绝对值 System.out.println(Math.abs(-4.6)); //取最大数 System.out.println(Math.max(1,3));
Random random = new Random(); //生成一个int范围内的随机数 System.out.println(random.nextInt()); //生成0-30范围的随机数 System.out.println(random.nextInt(30)); //生成0.0-1.0 的随机数 System.out.println(random.nextDouble());
五、日期、时间类
ava提供了Date和Calendar来处理日期和时间,但Date不仅不支持国际化,而且不同属性也使用了前后矛盾的偏移量,Java 8 又提供了全新的日期时间库。
Date 现在在用的有两个构造器:
-
Date() :生成一个代表当前日期时间的date对象
-
Date(long date):指定的long型整数来生成一个Date对象
Date 还在使用的方法也很少:
Date date = new Date();
Date date1 = new Date(System.currentTimeMillis()+100);
//测试该日期是否在指定日期之后
System.out.println(date.after(date1));
//比较日期大小
System.out.println(date.compareTo(date1));
Date类设计的并不好,对日期的操作推荐使用Calendar。
5.2
Calendar calendar = Calendar.getInstance(); Date date2 = calendar.getTime(); Calendar calendar1 = Calendar.getInstance(); calendar1.setTime(date2);
Calendar 类提供了大量访问、修改日期时间的方法,常用方法如下:
//给指定的字段增加或者减去时间量,如果指定量超过最大值,则进位 calendar.add(Calendar.YEAR,1); //获取指定的字段值 System.out.println(calendar.get(Calendar.YEAR)); System.out.println(calendar.get(Calendar.MONTH)); System.out.println(calendar.get(Calendar.DATE)); //设置日期值 calendar.set(2003,10,2,10,50,10); //给指定的字段增加或者减去时间量,如果指定量超过最大值,不进位 calendar.roll(Calendar.YEAR,13);
5.3
Java 8 提供了java.time 包来处理日期和时间,常用的类:
-
Clock:获取指定时区的当前日期、时间。
-
Duration:代表持续时间,可以方便的获取一段时间。
-
Instant:代表具体时刻,可以精确到纳秒。
-
LocalDate:该类代表不带时区的日期。
-
LocalTime:该类代表不带时区的时间。
-
LocalDateTime:该类代表不带时区的日期、时间。
-
MonthDay:该类代表月日。
-
Year:代表年。
-
YearMonth:代表年月。
正则表达式是强大的字符串处理工具,可以对字符串进行查找、提取、分隔、替换等操作。
Java提供了Pattern和Matcher来使用正则表达式
//将字符串编译成Pattern对象 Pattern pattern = Pattern.compile("a*b"); //使用Pattern创建Matcher对象 Matcher matcher = pattern.matcher("aaaaab"); System.out.println(matcher.matches()); //只能使用一次,效率不高 Pattern.matches("a*b", "aaabbb"); String s = "XXX:13892329111,XXX:18922121231,XXX:13824322341"; Matcher matcher1 = Pattern.compile("1\\d{10}").matcher(s); //返回目标字符串中是否包含匹配的字串 while (matcher1.find()) { //返回上一次匹配的字串 System.out.println(matcher1.group()); }
七、
//将日期转换成固定格式 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date date = new Date(); System.out.println(simpleDateFormat.format(date)); //日期字符串 String str = "14###三月##21"; SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("y###MMM##d"); //将日期字符串解析成日期,主要格式要匹配的上,不然会报错 System.out.println(simpleDateFormat.format(simpleDateFormat1.parse(str)));
7.2
我们可以通过常量来创建格式化器,也可以使用不同风格的枚举值来创建
DateTimeFormatter[] formatters=new DateTimeFormatter[]{ //常量创建 DateTimeFormatter.ISO_DATE_TIME, DateTimeFormatter.ISO_LOCAL_DATE, DateTimeFormatter.ISO_DATE, //枚举值创建 DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL,FormatStyle.MEDIUM), //模式字符串 DateTimeFormatter.ofPattern("Gyyyy%%MMM%%dd") }; LocalDateTime localDate = LocalDateTime.now(); for (int i = 0; i <formatters.length ; i++) { //两种方式格式化日期 System.out.println(formatters[i].format(localDate)); System.out.println(localDate.format(formatters[i])); }
DateTimeFormatter 也可以将字符串直接转成日期,用法与SimpleDateFormat 相同。
来源:https://www.cnblogs.com/yuanqinnan/p/10757459.html