Java常用类
1、字符串
1.1、String类
- String类:代表字符串。Java程序中的所有字符串面值(如"ABC")都作为此类的实例实现。
- String是一个final类,代表不可变的字符序列。
- 字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。
- String对象的字符串内容是存储在一个字符数组value[]中的。
1.2、String常用API
方法 | 描述 |
---|---|
int length() | 返回字符串的长度:return value.length |
char charAt(int index) | 返回某索引处的字符 return value[index] |
boolean isEmpty() | 判断是否是空字符串: return value.length == 0 |
String toLowerCase() | 使用默认语言环境,将 String 中的所有字符转换为小写 |
String toUpperCase() | 使用默认语言环境,将 String中的所有字符转换为大写 |
String trim() | 返回定符串的副本,忽略前导空白和尾部空白 |
boolean equals(object obj) | 比较字符串的内容是否相同 |
boolean equalsIgnoreCase(String anotherString) | equals方法类似,忽略大小写 |
String concat(String str) | 将指定字符串连接到此字符串的结尾。等价于用“+” |
int compare To(String anotherString) | 比较两个字符串的大小 |
String substring(int beginIndex) | 返回一个新的字符串,它是此字符串的从beginlndex开始截取到最后的一个子字符串 |
String substring(int beginIndex, int endIndex) | 返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。 |
boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束 |
boolean startsWitfn(String prefix) | 测试此字符串是否以指定的前缀开始 |
boolean startsWith(String prefix, int toffset) | 测试此字符串从指定索引开始的子字符串是否以指定前缀开始 |
boolean contains(CharSequence s) | 当且仅当此字符串包含指定的char值序列时,返回true |
int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引 |
int indexOf(String str, int fromIndex) | 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始 |
int lastlndexOf(String str) | 返回指定子字符串在此字符串中最右边出现处的索引 |
int lastIndexOf(String str, int fromlndex) | 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索 |
注: indexOf和lastIndexOf方法如果未找到都是返回-1 | |
string replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的 |
string replace(CharSequence target,CharSequence replacement) | 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 |
string replaceAll(String regex,String replacement) | 使用给定的replacement替换此字符串所有匹配给定的正则表达式的子字符串。 |
String replaceFirst(String regex,String replacement) | 使用给定的replacement替换此字符串匹配给定的正则表达式的第一个子字符串 |
boolean matches(String regex) | 告知此字符串是否匹配给定的正则表达式。 |
Stringsplit(String regex) | 根据给定正则表达式的匹配拆分此字符串。 |
Stringsplit(String regex,int limit) | 根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。 |
1.3、String与基本类型包装类的转换。
- 字符串→基本数据类型、包装类
- Integer包装类的public static int parselnt(String s):可以将由“数字”字符组成的字符串转换为整型。
- 类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型。
- 基本数据类型、包装类→字符串
- 调用String类的public String valueOf(int n)可将int型转换为字符串
- 相应的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(doubled)、valueOf(boolean b)可由参数的相应类型到字符串的转换
- 字符数组→字符串
- String类的构造器: String(char[)和 String(char,int offset,intlength)分别用字符数组中的全部字符和部分字符创建字符串对象。
- 字符串→字符数组
- public char[]toCharArray():将字符串中的全部字符存放在一个字符数组中的方法。
- public void getChars(int srcBegin, int srcEnd, char[ dst,int dstBegin):提供了将指定索引范围内的字符串存放到数组中的方法。
- 字节数组→字符串
- String(byte0):通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
- string(byte,int offset,int length):用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。
- 字符串→字节数组
- public bytel getBytes():使用平台的默认字符集将此 String编码为byte 序列,并将结果存储到一个新的 byte 数组中。
- public byte[ getBytes(String charsetName):使用指定的字符集将此 String 编码到byte序列,并将结果存储到新的 byte数组。
1.4、StringBuffer和StringBulider
String、 StringBuffer.StringBuilder三者的异同?
String:不可变的字符序列;底层使用char[]存储
stringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
stringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
- StringBuffer的常用方法:
- stringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
- StringBuffer delete(int start,int end):删除指定位置的内容
- StringBuffer replace(int start, int end,String str):把[start,end)位置替换为s
- StringBuffer insert(int offset, xxx):在指定位置插入xxx
- StringBuffer reverse() :把当前字符序列逆转
- public int indexof(String str)
- public string substring(int start,int end)public int length()
- public char charAt(int n )
- public void setcharAt(int n ,char ch)
2、JDK8之前的日期时间API
- 1.java.lang.System类
System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
此方法适于计算时间差。
- 2.java.util.Date类
表示特定的瞬间,精确到毫秒构造器:
Date():使用无参构造器创建的对象可以获取本地当前时间。Date(long date)
- 常用方法
getTime():返回自1970年1月1日O0:00:00 GMT以来此Date对象表示的毫秒数。
toString():把此Date对象转换为以下形式的 String: dow mon ddhh:mm:ss zzz yyyy其中: dow是一周中的某一天(Sun,Mon,Tue,Wed,Thu, Fri, Sat),zzz是时间标准。
其它很多方法都过时了。
- 3.java.text.SimpleDateFormat指
Date类的API不易于国际化,大部分被废弃了,java.text.SimpleDateFormat类是一个不与语言环境有关的方式来格式化和解析日期的具体类。
它允许进行格式化:日期>文本、解析:文本→日期
- 格式化:
simpleDateFormat():默认的模式和语言环境创建对象
public SimpleDateFormat(String pattern):该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
public String format(Date date):方法格式化时间对象date解析:
public Date parse(String source):从给定字符串的开始解析文本,以生成一个日期。
- 4.java.util.Calendar(日历)类
- 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)
- 注意:
获取月份时:一月是0,二月是1,以此类推,12月是11获取星期时:周日是1,周二是2,。。 。。周六是7
3、JDK8中新日期时间API
3.1、LocalDate、LocalTime、LocalDateTime
- LocalDate、LocalTime、LocalDateTime[类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。
- LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存储生日、纪念日等日期。
- LocalTime表示一个时间,而不是日期。
- LocalDateTime是用来表示日期和时间的,这是一个最常用的类之一。
方法 | 描述 |
---|---|
now( ! * now(zoneld zone) | 静态方法,根据当前时间创建对象/指定时区的对象 |
of() | 静态方法,根据指定日期/时间创建对象 |
getDayOfMonth()、getDayOfYear() | 获得月份天数(1-31)/获得年份天数(1-366) |
getDayofWeek() | 获得星期几(返回一个DayOfWeek枚举值) |
getMonth() | 获得月份,返回一个 Month枚举值 |
getMonthValue()、getYear() | 获得月份(1-12)/获得年份 |
getHour()、getMinute()、getsecond() | 获得当前对象对应的小时、分钟、秒 |
withDayOfMonth()、withpay ofYear()、withMonth()、withear() | 将月份天数、年份天数、月份、年份修改为指定的值并返回新的对象 |
plusDays()、 plusWeeks(0)、plusMonths()、plusYears()、plusHours() | 向当前对象添加几天、几周、几个月、几年、几小时 |
minusMonths()、 minusWeeks()、 minusDays()/minusYears()、minusHours() | 从当前对象减去几月、几周、几天、几年、几小时 |
3.2、Instant类
lnstant:时间线上的一个瞬时点。这可能被用来记录应用程序中的事件时间戳。
在处理时间和日期的时候,我们通常会想到年,月,日,时,分,秒。然而,这只是时间的一个模型,是面向人类的。第二种通用模型是面向机器的,或者说是连续的。在此模型中,时间线中的一个点表示为一个很大的数,这有利于计算机处理。在UNIX中,这个数从1970年开始,以秒为的单位;同样的,在Java中,也是从1970年开始,但以毫秒为单位。
java.time包通过值类型Instant提供机器视图,不提供处理人类意义上的时间单位。Instant表示时间线上的一点,而不需要任何上下文信息,例如,时区。概念上讲,它只是简单的表示自1970年1月1日0时0分0秒(UTC)开始的秒数。因为java.time包是基于纳秒计算的,所以* * Instant的精度可以达到纳秒级。(1 ns = 10-9s)1秒=1000毫秒=106微秒=109纳秒。
方法 | 描述 |
---|---|
now() | 静态方法,返回默认UTC时区的Instant类的对象 |
ofEpochMilli(long epochMilli) | 静态方法,返回在1970-01-01 00:00:00基础上加上指定毫秒数之后的Instant类的对象 |
atoffset(zoneoffset offset) | 结合即时的偏移来创建一个 OffsetDateTime |
toEpochMilli() | 返回1970-01-01 00:00:00到当前时间的毫秒数,即为时间戳 |
3.3、DateTimeFormatter类
- java.time.format.DateTimeFormatter类:该类提供了三种格式化方法:
- 预定义的标准格式。如:
ISo_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
- 本地化相关的格式。如: ofLocalizedDateTime(FormatStyle.LONG)
- 自定义的格式。如: ofPattern(“yyyy-MM-dd hh:mm:ss E”)
方法 | 描述 |
---|---|
ofPattern(String pattern) | 静态方法,返回一个指定字符串格式的DateTimeFormatter |
format( TemporalAccessor t) | 格式化一个日期、时间,返回字符串 |
parse(CharSequence text) | 将指定格式的字符序列解析为一个日期、时间 |
4、Java比较器
- 在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。
- Java实现对象排序的方式有两种:
- 自然排序: java.lang.Comparable
- 定制排序: java.util.Comparator
4.1、方式一:自然排序:java.lang.Comparable
- Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。
- 实现Comparable 的类必须实现compareTo(Object obj)方法,两个对象即通过compareTo(Object obj)方法的返回值来比较大小。如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj,则返回负整数,如果当前对象this等于形参对象obj,则返回零。|
- 实现Comparable接口的对象列表(和数组)可以通过Collections.sokt或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
- 对于类C的每一个e1和 e2来说,当且仅当e1.compareTo(e2)==0与e1.equals(e2)具有相同的 boolean值时,类C的自然排序才叫做与equals一致。建议(虽然不是必需的)最好使自然排序与equals一致。
4.2、方式二:定制排序:java.util.Comparator
- 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用Comparator的对象来排序,强行对多个对象进行整体排序的比较。
- 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
- 可以将Comparator传递给sort方法(如Collections.sort或Arrays.sort) ,从而允许在排序顺序上实现精确控制。
还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
5、System类
- System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。
- 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便的进行调用。
- 成员变量
System类内部包含in、out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
- 成员方法
native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机E间和GMT时间(格林威治时间)1970年1月1号O时0分O秒所差的毫秒数。
void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。
- void gc():
该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
- String getProperty(String key):
该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:
6、Math类
java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返叵值类型一般为double型。
方法 | 描述 |
---|---|
abs | 绝对值 |
acos,asin,atan,cos,sin,tan | 三角函数 |
sqrt | 平方根 |
pow(double a,doble b) | a的b次幂log自然对数 |
exp | e为底指数 |
max(double a,double b)min(double a,double b) | |
random() | 返回0.0到1.0的随机数 |
long round(double a) | double型数据a转换为long型(四舍五入) |
toDegrees(double angrad) | 弧度—>角度 |
toRadians(double angdeg) | 角度—>弧度 |
7、Binglnteger与BingDecimal
7.1、Binglnteger
- Integer类作为int的包装类,能存储的最大整型值为231-1,Long类也是有限的,最大为263-1。如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。
- java.math包的Biglnteger可以表示不可变的任意精度的整数IBigInteger提供所有Java的基本整数操作符的对应物,并提供java.lang.Math的所有相关方法。9另外,BiglInteger还提供以下运算:模算术、GCD计算、质数测试、素数生成、位操作以及一些其他操作。
- 构造器
Biglnteger(String val):根据字符串构建Biglnteger对象
方法 | 描述 |
---|---|
public BigInteger abs() | 返回此BigInteger 的绝对值的 BigInteger。 |
BigInteger add(BigInteger val) | 返回其值为(this + val)的 BigInteger |
BigInteger subtract(BigInteger val) | 返回其值为(this - val)的 BigInteger |
BigInteger multiply(BigInteger val) | 返回其值为(this * val)的 BigInteger |
BigInteger divide(BigInteger val) | 返回其值为(this / val)的 BigInteger。整数相除只保留整数部分。 |
BigInteger remainder(BigInteger val) | 返回其值为(this % val)的 BigInteger。 |
BigInteger[] divideAndRemainder(BigInteger val) | 返回包含(this / val)后跟(this % val)的两个 BigInteger的数组。 |
BigInteger pow(int exponent) | 返回其值为(thisexponent)的 BigInteger。 |
7.2、BingDecimal
- 一般的Float类和Double类可以用来做科学计算或工程计算,但在商业计算中,要求数子精度比较高,故用到java.math.BigDecimal类。
- BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
- 构造器
public BigDecimal(double val)
public BigDecimal(String val)
- 常用方法
public BigDecimal add(BigDecimal augend)
public BigDecimal subtract(BigDecimal subtrahend)public BigDecimal multiply(BigDecimal multiplicand)
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)