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)位置替换为str
StringBuffer insert(int offset, xxx):在指定位置插入xxx
StringBuffer 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、SECOND
public 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 对象来排序。
```java
Arrays.sort(all, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Goods g1 = (Goods) o1; // 强制类型转换
Goods g2 = (Goods) o2;
return g1.getName().compareTo(g2.getName());
}
});
6.4 Math类
abs
acos,cos
sqrt
pow(double a,double b)
log
exp
max(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)