6.1 String类
Java中所有字符串都是 String的实例,String对象存储在value[]中。
// 常量字符串存储在字符串常量池,目的是共享,常量池中不存在相同常量String str1 = "abc";// 非常量字符串对象存储在堆中String str2 = new String("abc");String str3 = new String(char[] a); // 字符数组到字符串// 若拼接结果调用了intern(),该返回值在常量池中。(intern:扣押)
int length()char charAt(int index)boolean isEmpty()String toLowerCase()String toUpperCase()String trim()boolean equals(Object obj)boolean equalsIgnoreCase(String anotherString)int compareTo(String anotherString)String substring(int begin, int end) :返回[begin,end)子串。boolean endsWith(String suffix):字符串是否以指定的后缀结束int indexOf(String str):返回str在此字符串中第一次出现处的索引String replace(char oldChar, char newChar):用 newChar 替换所有 oldChar 并返回String replaceAll(String regex, String replacement):用给定字符串替换所有匹配正则表达式regex的子串。boolean matches(String regex):是否匹配给定的正则表达式。String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。String[] split(String regex, int limit):据给定正则表达式的匹配拆分此字符串,最多不超过limit个public char[] toCharArray():转化为字符数组public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将指定索引范围内的字符串存放到数组中的
String提供了静态方法format用于格式化字符串,也提供printf实现格式化输出
System.out.printf("浮点型变量的值为 %f, 整型变量的值为 %d, 字符串变量的值为 is %s", floatVar, intVar, stringVar);String.format("浮点型变量的值为 %f, 整型变量的值为 %d, 字符串变量的值为 is %s", floatVar, intVar, stringVar);
String是固定的,StringBuffer是可变的,类内部的value[]未声明final。其方法与String基本相同,必须由构造器生成。
StringBuffer append(xxx):字符串拼接StringBuffer delete(int start,int end):删除指定位置的内容StringBuffer replace(int start, int end, String str):把[start,end)位置替换为strStringBuffer insert(int offset, xxx):在指定位置插入xxxStringBuffer reverse() :字符序列逆转
StringBuilder与StringBuffer非常类似,也是可变字符序列,方法基本相同。三者区别如下:
- String:不可变字符序列
- StringBuffer:可变字符序列、效率低、线程安全
- StringBuilder:可变字符序列、效率高、线程不安全
6.2 Java时间API
6.2.1 Java8之前
不推荐使用。在此期间提供的月份都是从0开始,星期是以周日为起始日。而且线程不安全。
java.lang.System
// 返回当前时间与1970年1月1日0时的毫秒差,该方法适用于计算时间差System.currentTimeMillis();
java.util.Date
// 构造器:Date(); //获取本地当前时间对象Date(long date); // 指定毫秒数对象// 常用方法:getTime(); // 返回当前时间与1970年1月1日0时的毫秒差toString(); // 输出 dow mon dd hh:mm:ss zzz yyyy 其中: dow 是周几,zzz是时间标准
java.text.SimpleDateFormat
// 格式化:SimpleDateFormat(); // 默认格式创建对象,不常用public SimpleDateFormat(String pattern); // 用指定系统提供格式创建对像public String format(Date date);public Date parse(String source);
java.util.Calendar
Calendar calendar = Calendar.getInstance();// YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECONDpublic void set(int field,int value)public void add(int field,int amount)public final Date getTime()public final void setTime(Date date)
6.2.2 JDK 8 新时间API
- java.time – 包含值对象的基础包
- java.time.format – 格式化、解析时间和日期
LocalDate、LocalTime、LocalDateTime(最常用)的实例是不可变对象,分别表示公历日期、时间、日期加时间。下面这些方法均具有不可变性,即计算后必须重新赋值,原对象信息不变。
now() /now(ZoneId zone) //静态方法,创建当前时间对象,可指定时区of() //静态方法,根据指定日期/时间创建对象getDayOfMonth()/getDayOfYear()/getDayOfWeek() //获得月份天数(1-31) 、获得年份天数(1-366)等getMonth() //获得月份, 返回一个 Month 枚举值getHour()/getMinute()/getSecond() //获得当前对象对应的小时、分钟、秒withDayOfMonth()/withDayOfYear()/withMonth()/withYear() //将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象plusDays(), plusWeeks(), plusMonths(),plusYears(),plusHours()minusMonths()/minusWeeks()/minusDays()/minusYears()/minusHours()
java.time.format.DateTimeFormatter 类提供了三种格式化方法来创建实例,均为静态方法或常量:
- 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
- 本地化相关的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
- 自定义的格式(最常用)。如:ofPattern(“yyyy-MM-dd hh:mm:ss”) ```java format(TemporalAccessor t) //格式化一个日期、时间对象,返回字符串 parse(CharSequence text) //将指定格式的字符序列解析为一个日期、时间
// 例子 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy-MM-dd hh:mm:ss”); LocalDateTime localDateTime = LocalDateTime.now(); String str1 = formatter.format(localDateTime); // 将日期解析为指定格式字符串 TemporalAccessor parse = formatter.parse(“1999-3-4 12:12:12”); System.out.println(parse);
<a name="m1Zel"></a>## 6.3 Java比较器- 自然排序:声明`java.lang.Comparable`接口<br />实现 Comparable 的类必须实现 compareTo(Object obj) 方法。如果当前对象this大于形参对象obj,则返回正整数,反之返回负整数,相等返回零。实现该接口的列表可由Collections.sort或Arrays.sort自动排序- 定制排序:`java.util.Comparator`<br />当对象没有实现Comparable接口而又不方便修改代码, 或者实现了Comparable接口的排序规则不适合当前的操作,可以使用 Comparator 对象来排序。```javaArrays.sort(all, new Comparator() {@Overridepublic int compare(Object o1, Object o2) {Goods g1 = (Goods) o1; // 强制类型转换Goods g2 = (Goods) o2;return g1.getName().compareTo(g2.getName());}});
6.4 Math类
absacos,cossqrtpow(double a,double b)logexpmax(double a,double b);random() // 返回0-1随机数round(double a);toDegress()/toRadians() // 弧度/角度互换
6.5 Character类
isLetter()isDigit()isWhitespace()isUpperCase()toUpperCase()
6.6 BigInteger和BigDecimal
每种基本数据类型都有自身的表示范围,出界则会溢出。java.math包的BigInteger可以表示不可变的任意精度的整数,并提供所有Math类的方法,BigInteger还提供模运算、GCD运算、素数生成、质数运算等。
BigInteger(String val) // 根据字符串构建BigInteger对象BigInteger add(BigInteger val)BigInteger subtract(BigInteger val)BigInteger multiply(BigInteger val)BigInteger divide(BigInteger val) // 整数相除只保留整数部分。BigInteger remainder(BigInteger val) // 取模BigInteger pow(int exponent)
