JDK API
什么是JDK API?
JDK中包含大量的API类库,所谓AP就是一些写好的,可提供直接调用的功能(在Java语言中,这些功能以类的形式封装)。
JDK API包含的类库功能强大,经常使用的有:字符串处理,集合操作,文件操作,输入输出操作,网络操作,多线程等。
JDK包结构
为了便于使用和维护,JDK类库按照包结构划分,不同功能的类划分在不同的包中;
经常使用的包如下图:
包 | 功能 |
java.lang | Java程序的基础类,如字符串、多线程等,该包中的类使用的频率非常高,不需要import,可以直接使用 |
java.util | 常用工具类,如集合、随机数产生器、日历、时钟等 |
java.io | 文件操作、输入/输出操作 |
java.net | 网络操作 |
java.math | 数学运算相关操作 |
java.security | 安全相关操作 |
java.sql | 数据库访问 |
java.text | 处理文字、日期、数字、信息的格式 |
JAVA文档注释
什么是文档注释?
java只有3种注释方式,前两种分别是//和/* */,第三种被称作为说明注释,它以/** 开始,以*/结尾。
怎么使用注释文档?
加在类和方法的开头,可以轻松的将此注释转换成HTML文档说明;学习者和程序员主要通过文档理解API的功能。
说明注释允许你在程序中嵌入关于程序的信息。你可以使用javadoc工具软件来生成信息,并输入到HTML文件中,说明注释,使你的更加方便的记录你的程序的信息。
javadoc 标签
javadoc工具软件识别以下标签:
标签 | 描述 | 示例 |
---|---|---|
@author | 标识一个类的作者 | @author description |
@deprecated | 指名一个过期的类或成员 | @deprecated description |
{@docRoot} | 指明当前文档根目录的路径 | Directory Path |
@exception | 标志一个类抛出的异常 | @exception exception-name explanation |
{@inheritDoc} | 从直接父类继承的注释 | Inherits a comment from the immediate surperclass. |
{@link} | 插入一个到另一个主题的链接 | {@link name text} |
{@linkplain} | 插入一个到另一个主题的链接,但是该链接显示纯文本字体 | Inserts an in-line link to another topic. |
@param | 说明一个方法的参数 | @param parameter-name explanation |
@return | 说明返回值类型 | @return explanation |
@see | 指定一个到另一个主题的链接 | @see anchor |
@serial | 说明一个序列化属性 | @serial description |
@serialData | 说明通过writeObject( ) 和 writeExternal( )方法写的数据 | @serialData description |
@serialField | 说明一个ObjectStreamField组件 | @serialField name type description |
@since | 标记当引入一个特定的变化时 | @since release |
@throws | 和 @exception标签一样. | The @throws tag has the same meaning as the @exception tag. |
{@value} | 显示常量的值,该常量必须是static属性。 | Displays the value of a constant, which must be a static field. |
@version | 指定类的版本 | @version info |
文档注释:
在开始的/**之后,第一行或几行是关于类,变量和方法的主要描述。
之后,你可以包含一个或多个何种各样的@标签。每个@标签必须在一个新行的开始或者在一行的开始紧跟星号(*)。
多个相同类型的标签应该放在一组。
子符串处理
String及其常用API
什么是字符串处理?
一般程序需要处理大量文本数据,Java 语言的文本数据被保存为字符或字符串类型。关于字符及字符串的操作主要用到 String 类和 StringBuffer 类,如连接、修改、替换、比较和查找等。
字符串是 Java 程序中经常处理的对象之一,因此如果字符串运用得不好,将影晌到程序的运行效率。本章从如何定义字符串开始介绍字符串本身的特性,以及各种字符串操作的实现方法。
String类
在代码中遇到字符串常量时,这里的值是"Hello world!",编译器会使用该值创建一个String对象。
和其它对象一样,可以使用关键字和构造方法来创建String对象。
String类有11种构造方法,这些方法提供不同的参数来初始化字符串。
String是不可变对象
java.lang.String使用了final修饰,不能被继承。
字符串底层封装了字符数组及针对字符串数组的操作算法。
字符串一旦创建,对象永远无法改变,单字符串引用可以重新赋值。
Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码。
String 方法
下面是String类支持的方法,更多详细,参看Java API文档:
SN(序号) | 方法描述 |
---|---|
1 | char charAt(int index) 返回指定索引处的 char 值。 |
2 | int compareTo(Object o) 把这个字符串和另一个对象比较。 |
3 | int compareTo(String anotherString) 按字典顺序比较两个字符串。 |
4 | int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 |
5 | String concat(String str) 将指定字符串连接到此字符串的结尾。 |
6 | boolean contentEquals(StringBuffer sb) 当且仅当字符串与指定的StringButter有相同顺序的字符时候返回真。 |
7 | static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。 |
8 | static String copyValueOf(char[] data, int offset, int count) 返回指定数组中表示该字符序列的 String。 |
9 | boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 |
10 | boolean equals(Object anObject) 将此字符串与指定的对象比较。 |
11 | boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 |
12 | byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
13 | byte[] getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 |
14 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此字符串复制到目标字符数组。 |
15 | int hashCode() 返回此字符串的哈希码。 |
16 | int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
17 | int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
18 | int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
19 | int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
20 | String intern() 返回字符串对象的规范化表示形式。 |
21 | int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 |
22 | int lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 |
23 | int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 |
24 | int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 |
25 | int length() 返回此字符串的长度。 |
26 | boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。 |
27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
28 | boolean regionMatches(int toffset, String other, int ooffset, int len) 测试两个字符串区域是否相等。 |
29 | String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
30 | String replaceAll(String regex, String replacement 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
31 | String replaceFirst(String regex, String replacement) 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。 |
32 | String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
33 | String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。 |
34 | boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 |
35 | boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
36 | CharSequence subSequence(int beginIndex, int endIndex) 返回一个新的字符序列,它是此序列的一个子序列。 |
37 | String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 |
38 | String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
39 | char[] toCharArray() 将此字符串转换为一个新的字符数组。 |
40 | String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
41 | String toLowerCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。 |
42 | String toString() 返回此对象本身(它已经是一个字符串!)。 |
43 | String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
44 | String toUpperCase(Locale locale) 使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。 |
45 | String trim() 返回字符串的副本,忽略前导空白和尾部空白。 |
46 | static String valueOf(primitive data type x) 返回给定data type类型x参数的字符串表示形式。 |
常用用到的字符串处理,操作
1.连接字符串
“+”运算符是最简单,最快捷,也是使用最多的字符串连接方式。
在使"+"运算符连接字符串和int型(或double型数)数据时,"+"将int(double)型数据自动转换成String类型。
使用concat()方法也可以。
语法:
字符1.concat(字符2);
连接不同类型数据时用"+"。
2.内存编码及长度
获取字符串长度
语法:
字符串名.length();
3.大小写变换(查阅API)
语法:
字符串名.toUpperCase();
String类的toUpperCase()方法可以将字符串的所有字符全部转换为大写,而非子母的字符不受影响。
语法:
字符串名.toLowerCase();
String类的toLowerCase()方法可以将字符串的所有字符全部转换成小写,而非子母的字符不受影响。
4.trim(查阅API)
去除空格
语句:
字符串名.trim();
5.使用substring获取子串
substring方法用于返回一个字符串的子字符串
substring常用重载方法定义:
String substring(int beginIndex,int endIndex) | 返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的子字符串 |
String substring(int beginIndex) | 返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串 |
提取子字符
语句:
字符串名.subString();
6.分割字符串
语法:
字符串名.split(数据类型,变量名);
String类的split()方法可以按指定的分割对目标字符串进行分割,分割后的内容存放在字符串数组中。
7.字符串替换
String 类提供了 3 种字符串替换方法,分别是 replace()、replaceFirst() 和 replaceAll()
replace()
语法:
字符串.replace(替换数据名,要替换的数据名);
replace()方法用于将目标字符串的指定字符串替换成新的字符(全部含有这个元素)。
replaceFirst()
语法:
字符串.replaceFirst(替换数据名,要替换数据名);
字符串replaceFirst()方法用于将目标字符串中某匹配正则表达式的第一个子字符串替换。
replaceAll()
语法:
字符串.replaceAll(替换数据名,要替换数据名);
replaceAll()方法用于将目标字符串中匹配某正则表达式的所有子字符串替换。
8.字符串比较
语法:
字符串1.equals(字符串2);
equals方法相同逐个比较两个字符串的每个字符是否相同,对于字符大小写也要检查。
语法:
字符串1.equalslgnoreCace(字符串2);
与equals方法相同,但比较时不区分大小写。
语法:
字符串1.compareTo(字符串2);
compateTo()方法用于按字典顺序比较两个字符串大小,比较是基于字符串各个字符的Unicode值。
如果字符串1位于字符串2参数之前,比较结果为一个负整数;否则为整数;如果相等则为0。
9.使用indexOf实现检索
String提供几个重载的indexOf方法
int indexOf(String str) | 在字符串中检索str,返回其第一次出现的位置,如果找不到则返回-1 |
int indexOf(String str,int fromIndex) | 从字符串的fromIndex位置开始检索 |
String还定义有lastIndexOf方法:
int lastIndexOf(String str,int from) | str在字符串中多次出现时,将返回最后一个出现的位置 |
语法:
字符串.imdexOf(查找元素);
indexOf()方法用于返回字符串在指定字符串中首次出现的索引位置,如果能找到返回索值,否则返回-1.
语法:
字符串.lastindexOf(查找元素);
lastindexOf()方法用于返回字符串中指字符串最后一次出现的索引位置,如果找到返回索引,否则返回-1。
lastindexOf()方法是从右往左查找,如果不指定起始索引位置,默认从字符串末尾找。
10.charAt(查阅API)
语法:
字符串名.charAt(索引值);
String类的charAt()方法根据指定的索引值查找。
11. valueOf(查阅API)
valueOf方法用于将其他类型转换成字符串类型。
12.startsWith和endsWith(查阅API)
startsWith检测一个字符串是否以指定字符串开头。
endsWith检测一个字符串是否以值定字符串结尾。
StringBuffer和StringBuilder类
当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类。
和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder类在Java 5中被提出,它和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据)。
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
StringBuffer 方法
常用方法:
StringBuilder类的常用方法 | 功能描述 |
StringBuilder append(String str) | 追加字符串 |
StringBuilder insert(int dstOffset,String s) | 插入字符串 |
StringBuilder delete(int start,int end) | 删除字符串 |
StringBuilder replace(int start,int end,String str) | 替换字符串 |
StringBuilder reverse() | 字符串反转 |
下面的列表里的方法和String类的方法类似:
序号 | 方法描述 |
1 | int capacity() 返回当前容量。 |
2 | char charAt(int index) 返回此序列中指定索引处的 char 值。 |
3 | void ensureCapacity(int minimumCapacity) 确保容量至少等于指定的最小值。 |
4 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此序列复制到目标字符数组 dst 。 |
5 | int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。 |
6 | int indexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。 |
7 | int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。 |
8 | int lastIndexOf(String str, int fromIndex) 返回最后一次出现的指定子字符串在此字符串中的索引。 |
9 | int length() 返回长度(字符数)。 |
10 | void setCharAt(int index, char ch) 将给定索引处的字符设置为 ch 。 |
11 | void setLength(int newLength) 设置字符序列的长度。 |
12 | CharSequence subSequence(int start, int end) 返回一个新的字符序列,该字符序列是此序列的子序列。 |
13 | String substring(int start) 返回一个新的 String ,它包含此字符序列当前所包含的字符子序列。 |
14 | String substring(int start, int end) 返回一个新的 String ,它包含此序列当前所包含的字符子序列。 |
15 | String toString() 返回此序列中数据的字符串表示形式。 |
追加字符串
语法:
StingBaffer 对象.append(字符串);
StringBaffer类的append()方法用于向原有StringBaffer对象中追加字符串,追加到StringBaffer对象的末尾。
替换字符串
语法:
StringBaffer 对象.deletecharAt();
deletecharAt()方法用于移除序列中指定位置的字符。
反转字符串
语法:
StringBuffer 对象.reverse();
reverse() 方法用于将字符串序列用其反转的形式取代。
删除字符串
1. deleteCharAt() 方法
deleteCharAt() 方法用于移除序列中指定位置的字符,
语法:
StringBuffer 对象.deleteCharAt(int index);
deleteCharAt() 方法的作用是删除指定位置的字符,然后将剩余的内容形成一个新的字符串。
2.delete方法():
语法:
StringBaffer 对象.delete(int start,int end);
delete()方法用于移除序列中子字符串的字符。
插入字符串
语法:
字符串.insert();
StringBuilder总结
· StringBuilder是可变字符串。字符串的内容计算,建议采用StringBuilder实现,这样性能会好一些;
· java的字符串连接的过程是利用StringBuilder实现的
StringBuffer和StringBuilder
- StringBuffer是线程安全的,同步处理的,性能稍慢
- StringBuilder是非线程安全的,并发处理的,性能稍快