1、什么是JDK API?
JDK中包含大量的API类库,所谓API(Application Programming Interface,应用程序编程接口),就是一些已经写好,可供直接调用的功能(在Java语言中这些功能以类的形式封装)
JDK API包含的类库功能强大,经常使用的有:字符串操作,集合操作,文件操作,输入输出操作,网络操作,多线程等等
2、JDK的包结构
为了便于使用和维护,JDK类库按包结构划分,不同的类库划分在不同的包中
经常使用的包入下表所示:
java.lang | Java程序的基础类,如字符串,多线程等该包中的类使用频率非常高,不需要import,可直接使用 |
java.util | 常用工具类,如随机数产生器,集合,日历,时钟等 |
java.io | 文件操作,输入输出操作 |
java.net | 网络操作 |
java.math | 数学运算相关操作 |
java.security | 安全相关操作 |
java.sql | 数据库访问 |
java.text | 处理文字,日期,数字,信息的格式 |
3、字符串基本操作
3.1 String及其常用api
3.11 String是不可变对象:
·java.lang.String使用了final修饰,不能被继承;
·字符串底层封装了字符数组及针对字符数组的操作算法
·字符串一旦被创建,对象永远无法改变,但字符串引用可以重新赋值
·java字符串在内存中采用Unicode编码模式,任何一个字符对应2个字节的定长编码
3.1.2String常量池
·java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串
·对于重复出现的字符串直接量,JVM首先会在常量池中查找,如果存在即返回对象。
public class Test01 { /**测试String常量池**/ @Test public void testConstantPool(){ String str1="Java"; //不会创建新的对象,而是使用常量池中已有的“Java” String str2="Java"; System.out.println(str1==str2);//输出 //使用new关键字会创建新的String对象 String str3=new String("Java"); System.out.println(str1==str3);//输出 } } |
3.1.3内存编码及长度
·String在内存中采用Unicode编码,每个字符占用两个字节;任何一个字符(无论中文还是英文)都算一个字符长度,占用两个字节
package string_test; import org.junit.Test; public class Test02 { /**获取String对象的长度**/ @Test public void testLength(){ String str1="java!"; System.out.println(str1.length()); String str2="你好java%"; System.out.println(str2.length()); } } |
3.1.4使用indexOf实现检索
·indexOf方法用于实现在字符串中检索另一个字符串
·String提供几个重载indexOf方法
int indexOf(Sting str) | 在字符串中检索str,返回其第一次出现的位置,如果找不到返回-1 |
int indexOf(String str,int fromIndex) | 从字符串的fromIndex位置开始检索 |
·String还定义有lastIndexOf方法:
int lastIndexOf(String str,int from) | Str在字符串中多次出现,将返回最后一次出现的位置 |
package string_test;
import org.junit.Test;
public class Test03 { /**在一个字符串中检索另一个字符串**/ @Test public void testIndexOf(){ String str="I can because ,I think I can"; int index=str.indexOf("can"); System.out.println(index); index=str.lastIndexOf("can"); System.out.println(index); index=str.indexOf("can", 9); System.out.println(index); index=str.indexOf("Can"); System.out.println(index); } } |
3.1.5使用substring获取字符串
·substring方法用于返回一个字符串的子字符串。
·substring 常用重载方法定义如下:
String substring(int begingIndex,int endIndex) | 返回字符串中从下标beginIndex(包括)开始,到endIndex(不包括)结束的子字符串 |
String substring(int beginIndex) | 返回字符串中从下标beginIndex(包括)开始,到字符串结尾的子字符串 |
package string_test;
import org.junit.Test;
public class Test04 { /**在一个字符串中截取指定的字符串**/ @Test public void testSubstring(){ String str="http://www.baidu.com"; String subStr=str.substring(11, 16); System.out.println(subStr); subStr=str.substring(7); System.out.println(subStr); } } |
3.1.6 trim去除空串
package string_test;
import org.junit.Test;
public class Test05 { /**去除一个字符串前面和后面的空字符**/ @Test public void testTrim(){ String str=" Study Java made feel happy "; String strTrim=str.trim(); System.out.println(str.length()); System.out.println(strTrim.length()); } } |
3.1.7 charAt
·String中定义charAt方法
char charAt(int index) | 方法charAt用于返回字符串指定位置的字符,参数index表示指定的位置 |
package string_test;
import org.junit.Test;
public class Test06 { /**遍历一个字符串中的字符序列**/ @Test public void testCharAt(){ String str="Workingmademefeelhappy?"; for (int i = 0; i < str.length(); i++) { char c=str.charAt(i); System.out.print(c+" "); } } } |
3.1.8 startsWith与endWith
package string_test;
import org.junit.Test;
public class Test07 { /**检测一个字符串是否以固定字符串开头或者结尾**/ @Test public void testStartWithAndEndWith(){ String str="this is my java?"; System.out.println(str.startsWith("this")); System.out.println(str.endsWith("java")); System.out.println(str.endsWith("java?")); } } |
3.1.9 大小写转换
package string_test;
import org.junit.Test;
public class Test08 { /**转换字符串中英文字母的大小写形式**/ @Test public void testToUpperAndToLower(){ String str="沉迷java STUDY无法自拔(⊙o⊙)…"; String strUpper=str.toUpperCase();//大写 System.out.println(strUpper); String strLower=str.toLowerCase();//小写 System.out.println(strLower); } } |
3.1.10 valueOf
package string_test;
import org.junit.Test;
public class Test09 { /**将其他类型转换成字符串类型*/ @Test public void testValueOf(){ double id=1.3520204119; int value=111; boolean flag=true; char[] arr={'s','t','u','d','y','j','a','v','a'}; String str=String.valueOf(id); System.out.println(str); str=String.valueOf(value); System.out.println(str); str=String.valueOf(flag); System.out.println(str); str=String.valueOf(arr); System.out.println(str); } } |
3.2 StringBuilder及其API
3.2.1 StringBuilder封装可变字符串
·StringBuilder封装可变字符串,对象创建后可以通过调用方法改变其封装的字符序列
·StringBuilder有如下常用构造方法:
public StringBuilder()
public StringBuilder(String str)
3.2.2StringBuilder 常用方法
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() | 字符串反转 |
3.2.3 StringBuilder
·StringBuilder的很多方法的返回值均为StringBuilder类型,这些方法的返回语句均为:
return this
·由于改变封装的字符串序列后又返回了该对象的引用,可以按如下方式简洁的书写代码:
package string_test;
import org.junit.Test;
public class Test10 { /**StringBuilder 简单的书写方式*/ @Test public void testStringBuilder(){ StringBuilder buff=new StringBuilder(); buff.append("I like java").insert(7, "PHP and ").replace(15, 19, "c++"); System.out.println(buff.toString()); buff.delete(7, 19).append("java more").insert(0, "but "); System.out.println(buff); } } |
3.2.4 StringBuilder 小结
·StringBuilder是可变字符串。字符串的内容计算,采用StringBuilder实现性能会相对好一些
·java的字符串连接的过程是利用StringBuilder实现的
|
·StringBuffer 和 StringBuilder
-- StringBuffer 是线程安全的,同步处理的,性能稍慢
-- StringBuilder 是非线程安全的,并发处理的,性能稍快