6.1 String类

Java中所有字符串都是 String的实例,String对象存储在value[]中。

  1. // 常量字符串存储在字符串常量池,目的是共享,常量池中不存在相同常量
  2. String str1 = "abc";
  3. // 非常量字符串对象存储在堆中
  4. String str2 = new String("abc");
  5. String str3 = new String(char[] a); // 字符数组到字符串
  6. // 若拼接结果调用了intern(),该返回值在常量池中。(intern:扣押)
  1. int length()
  2. char charAt(int index)
  3. boolean isEmpty()
  4. String toLowerCase()
  5. String toUpperCase()
  6. String trim()
  7. boolean equals(Object obj)
  8. boolean equalsIgnoreCase(String anotherString)
  9. int compareTo(String anotherString)
  10. String substring(int begin, int end) :返回[begin,end)子串。
  11. boolean endsWith(String suffix):字符串是否以指定的后缀结束
  12. int indexOf(String str):返回str在此字符串中第一次出现处的索引
  13. String replace(char oldChar, char newChar):用 newChar 替换所有 oldChar 并返回
  14. String replaceAll(String regex, String replacement):用给定字符串替换所有匹配正则表达式regex的子串。
  15. boolean matches(String regex):是否匹配给定的正则表达式。
  16. String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
  17. String[] split(String regex, int limit):据给定正则表达式的匹配拆分此字符串,最多不超过limit
  18. public char[] toCharArray():转化为字符数组
  19. public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将指定索引范围内的字符串存放到数组中的

String提供了静态方法format用于格式化字符串,也提供printf实现格式化输出

  1. System.out.printf("浮点型变量的值为 %f, 整型变量的值为 %d, 字符串变量的值为 is %s", floatVar, intVar, stringVar);
  2. String.format("浮点型变量的值为 %f, 整型变量的值为 %d, 字符串变量的值为 is %s", floatVar, intVar, stringVar);

String是固定的,StringBuffer是可变的,类内部的value[]未声明final。其方法与String基本相同,必须由构造器生成。

  1. StringBuffer append(xxx):字符串拼接
  2. StringBuffer delete(int start,int end):删除指定位置的内容
  3. StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
  4. StringBuffer insert(int offset, xxx):在指定位置插入xxx
  5. StringBuffer reverse() :字符序列逆转

StringBuilder与StringBuffer非常类似,也是可变字符序列,方法基本相同。三者区别如下:

  • String:不可变字符序列
  • StringBuffer:可变字符序列、效率低、线程安全
  • StringBuilder:可变字符序列、效率高、线程不安全

    6.2 Java时间API

    6.2.1 Java8之前

    不推荐使用。在此期间提供的月份都是从0开始,星期是以周日为起始日。而且线程不安全。

java.lang.System

  1. // 返回当前时间与1970年1月1日0时的毫秒差,该方法适用于计算时间差
  2. System.currentTimeMillis();

java.util.Date

  1. // 构造器:
  2. Date(); //获取本地当前时间对象
  3. Date(long date); // 指定毫秒数对象
  4. // 常用方法:
  5. getTime(); // 返回当前时间与1970年1月1日0时的毫秒差
  6. toString(); // 输出 dow mon dd hh:mm:ss zzz yyyy 其中: dow 是周几,zzz是时间标准

java.text.SimpleDateFormat

  1. // 格式化:
  2. SimpleDateFormat(); // 默认格式创建对象,不常用
  3. public SimpleDateFormat(String pattern); // 用指定系统提供格式创建对像
  4. public String format(Date date);
  5. public Date parse(String source);

java.util.Calendar

  1. Calendar calendar = Calendar.getInstance();
  2. // YEAR、MONTH、DAY_OF_WEEK、HOUR_OF_DAY 、MINUTE、SECOND
  3. public void set(int field,int value)
  4. public void add(int field,int amount)
  5. public final Date getTime()
  6. public final void setTime(Date date)

6.2.2 JDK 8 新时间API

  • java.time – 包含值对象的基础包
  • java.time.format – 格式化、解析时间和日期

LocalDateLocalTimeLocalDateTime(最常用)的实例是不可变对象,分别表示公历日期、时间、日期加时间。下面这些方法均具有不可变性,即计算后必须重新赋值,原对象信息不变。

  1. now() /now(ZoneId zone) //静态方法,创建当前时间对象,可指定时区
  2. of() //静态方法,根据指定日期/时间创建对象
  3. getDayOfMonth()/getDayOfYear()/getDayOfWeek() //获得月份天数(1-31) 、获得年份天数(1-366)等
  4. getMonth() //获得月份, 返回一个 Month 枚举值
  5. getHour()/getMinute()/getSecond() //获得当前对象对应的小时、分钟、秒
  6. withDayOfMonth()/withDayOfYear()/withMonth()/withYear() //将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象
  7. plusDays(), plusWeeks(), plusMonths(),plusYears(),plusHours()
  8. 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);

  1. <a name="m1Zel"></a>
  2. ## 6.3 Java比较器
  3. - 自然排序:声明`java.lang.Comparable`接口<br />实现 Comparable 的类必须实现 compareTo(Object obj) 方法。如果当前对象this大于形参对象obj,则返回正整数,反之返回负整数,相等返回零。实现该接口的列表可由Collections.sort或Arrays.sort自动排序
  4. - 定制排序:`java.util.Comparator`<br />当对象没有实现Comparable接口而又不方便修改代码, 或者实现了Comparable接口的排序规则不适合当前的操作,可以使用 Comparator 对象来排序。
  5. ```java
  6. Arrays.sort(all, new Comparator() {
  7. @Override
  8. public int compare(Object o1, Object o2) {
  9. Goods g1 = (Goods) o1; // 强制类型转换
  10. Goods g2 = (Goods) o2;
  11. return g1.getName().compareTo(g2.getName());
  12. }
  13. });

6.4 Math类

  1. abs
  2. acos,cos
  3. sqrt
  4. pow(double a,double b)
  5. log
  6. exp
  7. max(double a,double b);
  8. random() // 返回0-1随机数
  9. round(double a);
  10. toDegress()/toRadians() // 弧度/角度互换

6.5 Character类

  1. isLetter()
  2. isDigit()
  3. isWhitespace()
  4. isUpperCase()
  5. toUpperCase()

6.6 BigInteger和BigDecimal

每种基本数据类型都有自身的表示范围,出界则会溢出。java.math包的BigInteger可以表示不可变的任意精度的整数,并提供所有Math类的方法,BigInteger还提供模运算、GCD运算、素数生成、质数运算等。

  1. BigInteger(String val) // 根据字符串构建BigInteger对象
  2. BigInteger add(BigInteger val)
  3. BigInteger subtract(BigInteger val)
  4. BigInteger multiply(BigInteger val)
  5. BigInteger divide(BigInteger val) // 整数相除只保留整数部分。
  6. BigInteger remainder(BigInteger val) // 取模
  7. BigInteger pow(int exponent)