一、字符串相关类
1.String类
1.1 字符串的特性
- String是一个final类不可被继承,代表不可变的字符序列,底层使用char[]存放;
- 字符串是不可变的。一个字符串对象一旦被配置,其内容是不可变的。
- 字符串使用Unicode字符编码,一个字符占两个字节
1.2 字符串比较
String s1 = "JavaEE"; String s2 = "JavaEE"; String s3 = new String("JavaEE"); System.out.println(s1 == s2); // true System.out.println(s1 == s3); // false System.out.println(s1.equals(s3)); // true |
|
String s1 = "JavaEE"; // 字符串常量池里面新建一个字符串"JavaEE" String s2 = "JavaEE"; // 字符串常量池里面已经有一个字符串"JavaEE",直接指向它 String s3 = new String("JavaEE"); // 在堆中开辟一块地址,指向字符串常量池中的"JavaEE" System.out.println(s1 == s2); // true System.out.println(s1 == s3); // false System.out.println(s1.equals(s3)); // true String s4 = "JavaEE" + "Android"; //字符串常量池里面新建一个字符串"JavaEEAndroid",是否有加号一样 String s5 = "Android"; // 字符串常量池里面新建一个字符串"Android" s5 = s5 + "Hadoop"; // 在字符串常量池新建一个字符串"AndroidHadoop",栈中的s5指向这里 String s6 = s1 + s5; String s7 = s6.intern(); String s8 = "JavaEEAndroid"; // // 字符串常量池里面已经有一个字符串"JavaEEAndroid",直接指向它 System.out.println(s4 == s6); // false System.out.println(s4.equals(s6)); // false System.out.println(s7 == s4); // false System.out.println(s4 == s8); // true |
1.3 String类的常用方法
1.3.1 字符串对象操作
方法 | 实现 |
int length() |
|
char charAt(int index):返回在指定index位置的字符,index从0开始 |
|
boolean equals(Object anObject):比较两个字符串是否相等,相等返回true,否则返回false | |
int compareTo(String anotherString) | |
int indexOf(String s):返回s字符串在当前字符串中首次出现的位置,若没有,返回-1 | |
int indexOf(String s,int startpoint):返回s字符串从当前字符串startpoint位置开始的,首次出现的位置 | |
int lastIndexOf(String s):返回s字符串在当前字符串中最后一次出现的位置,若没有,返回-1 | |
int lastIndexOf(String s,int startpoint): | |
boolenan startsWith(String s):判断当前字符串是否以prefix开始 | |
boolean endsWith(String s,int startpoint):判断当前字符串是否以prefix结束 | |
boolean regionMatches(int firstStart,String other,int otherStart,int length):判断当前字符串从firstStart开始的子串与另一个字符串other从otherStart开始,length长度的子串是否equals |
1.3.2 字符串对象修改
方法 | 实现 |
public String substring(int startpoint) | |
public String substring(int start,int end):返回从start开始到end结束的一个左闭右开的子串,start可以从0开始 | |
public String replace(char oldChar,char newChar) | |
public String replaceAll(String old,String new) | |
public String trim():去除当前字符串中首尾出现的空格,若有多个,就去除多个 | |
public String concat(String str):连接当前字符串与str | |
public String[] split(String regex):按照regex将当前字符串拆分,拆分为多个字符串,整体返回值为String[]。 |
举例:
1.3.3 字符串与基本数据类型、包装类之间转换
字符串--->基本数据类型、包装类 调用相应的包装类的parseXxx(String str)
|
|
基本数据类型、包装类--->字符串 1.调用字符串的重载的valueOf()方法 方法实现避免了CalssCastException和NullPointerException,但是要注意,如果对象为null,那么返回的值是"null"字符串,而不是null。一定要注意这一点,在实际开发中,这个方法是比较常用的。 String中的valueOf方法大致可以分为三种:
2.强转 只有类型匹配的才可以强转,例如Object obj = new Integer(10); String str = (String) obj;会抛CalssCastException异常 3.toString() 必须保证对象不为null,否则抛NullPointerException异常 |
String.valueOf(Object)源码: String.valueOf(char[])源码: 举例: Integer arg = null; String.valueOf(arg); // 输出 null String.valueOf(null); // 抛java.lang.NullPointerException 因为Java中所有类的顶级父类都是Object,从Java重载方法的执行这篇文章中我们知道,方法重载时,char[]数组优先于Object,因此null会调用String.valueOf(char[])方法。对于Integer arg = null;与数组类型不匹配,因此调用String.valueOf(Object)方法。 |
1.3.4 字符串与字节数据间的转换
字符串--->字节数组 调用字符串的getBytes() |
|
字节数组--->字符串 调用字符串的构造器 |
1.3.5 字符串与字符数组的转换
字符串--->字符数组 调用字符串的toCharArray() |
|
字符数组--->字符串 调用字符串的构造器 |
2. StringBuffer类
2.1 StringBuffer类的特点
- java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
- 很多方法与Strinh相同,但StringBuffer是可变长度的。
- StringBuffer是一个容器。
- 线程安全
2.2 常用方法
添加: StringBufferer append(String s) StringBufferer append(int n) StringBufferer append(Object o) StringBufferer append(char n) StringBufferer append(long n) StringBufferer append(boolean n) |
|
插入: StringBufferer insert(int index,String str) |
|
反转此StringBuffer: public StringBuffer reverse() |
|
删除: StringBuffer delete(int startIndex,int endIndex) |
|
public char charAt(int n) | |
修改: public void setCharAt(int n,char ch) |
|
StringBuffer replace(int startIndex.int endIndex,String str) | |
public int indexOf(String str) | |
public String substring(int start,int end) | |
长度: public int length() |
3. StringBuilder类
3.1 StringBuilder类的特点
- 可变的字符串序列,是jdk5.0新加入的;
- 线程不安全,效率要高于StringBuffer
对比String、StringBuffer、StringBuilder三者在添加上的效率:由高到低StringBuilder>StringBuffer>String
二、日期类
1. java.lang.System类
System类提供的public static long currentTimeMills()用来返回当前时间与1970年1月1日0分0秒之间以毫秒为单位的时间差,此方法适用于计算时间差。
计算世界时间的主要标准有:UTC(Universal Time Coordinated)、GMT(Greenwich Mean Time)、CST(Central Standard Time)
2. java.util.Date类以及子类java.sql.Date类
表示特定的瞬间,精确到毫类
构造方法:
- Date():使用Date类的无参数构造方法创建的对象可以获取本地当前时间。
- Date(long date)
常用方法:
- getTime():返回自1970年1月1日00:00:00GMT以来此Date对象表示的毫秒数,
- toString():把此Date对象转换为以下形式的Stirng:dowmon dd hh:mm:ss zzz yyyy,其中:dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu,Fri,Sat),zzz是时间标准。
3. SimpleDataFormat类
Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
格式化(日期--->文本):
|
|
解析(文本--->日期):
|
4. java.util.Calendar类
java.util.Calendar是一个抽象基类,主要用于完成日期字段之间相互操作的功能。
获取Calendar实例的方法:
- 使用Calendar.getInstance()方法
- 调用它的子类GregorianCalendar的构造器。
一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比偶如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)
5.org.joda.time
三、java.long.Math类
四、BigInteger类与BigDecimal类
举例:
参考链接:
【1】String的valueOf方法源码解读_p7+的博客-CSDN博客_string.valueof源码
【2】Joda-Time DateTimeFormatter 日期格式化与解析_360linker-CSDN博客