一、JDK API类库
JDK中包含大量的API类库,所谓API(Application programming Interface,应用程序编程接口)就是一些已写好、可供直接调用的功能(在Java语言中,这些功能以类的形式封装)。
JDK API包含的类库功能强大,经常使用的有:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等等。
JDK类库按照包结构划分,不同功能的类划分在不同的包中:
java.lang Java程序的基础类,如字符串、多线程等,该包中的类使用的频率非常高,不需要import,可以直接使用。
java.util 常用工具类,如集合、随机数产生器、日历、时钟等。
java.io 文件操作、输入/输出操作。
java.net 网络操作。
java.math 数学运算相关操作。
java.security 安全相关操作。
java.sql 数据库访问。
java.text 处理文字、日期、数字、信息的格式。
二、文档注释
文档注释以”/**”开始,以”*/”结束,加在类和方法的开头,用于说明作者,时间,版本,要实现功能的详细描述等信息。
通过javadoc工具,可以将文档注释转换为HTML文档说明。学习者和程序员主要通过文档了解API的功能。
可以在eclipse中使用javadoc命令生成注释的HTML文档。
javadoc命令使用:javadoc -d docDir 包名或源码
三、字符串常量池
java.lang.String使用了final修饰,不能被继承。
字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值。
string常量池
Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串。
对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象。
public void testConstantPool(){
String str1 = "Hello";
//不会创建新的String对象,而是使用常量池中已有的"Hello"
String str2 = "Hello";
System.out.println(str1 == str2);//true
//使用new关键字会创建新String对象
String str3 = new String("Hello");
System.out.println(str1 == str3);//false
}
四、Junit单元测试方法
Junit单元测试,可用于自动测试某一个方法。需要导入org.junit.Test,并在测试方法的前面加上@Test注解。
五、字符串string相关常用方法
5.1、length()
length()方法可以获取字符串的长度。
String在内存中采用Unicode编码,每个字符占用两个字节。任何一个字符(无论中文还是英文)都算1个字符长度。
5.2、indexOf()
indexOf方法用于实现在字符串中检索另外一个字符串。
String提供了几个重载的indexOf方法:
1、int indexOf(String str)
在字符串中检索str,返回其第一次出现的位置,如果找不到则返回-1
2、int indexOf(String str,int fromIndex)
从字符串的fromIndex位置开始检索
3、int lastIndexOf(Strng str)
str在字符串中多次出现时,将返回最后一个出现的位置
5.3、substring()
substring方法用于返回一个字符串的子字符串。
substring常用重载方法定义如下:
1、String substring(int beginIndex,int endIndex)
返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的子字符串
2、String substring(int beginIndex)
返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串
package day01;
/**
* subString用于获取一个字符串的部分内容
* @author Administrator
*
*/
public class SubstringDemo {
public static void main(String []args){
// 01234567890123
String url = "www.oracle.com";
/*
* 通常情况下,用两个数字表示范围时
* 都是"含头不含尾"的
*/
String sub = url.substring(4,10);
System.out.println(sub);
//一个参数为从指定位置截取到字符串末尾
sub = url.substring(4);
System.out.println(sub);
url = "www.tarena.com.cn";
int one = url.indexOf(".");
int two = url.indexOf(".",one+1);
String s = url.substring(one+1,two);
System.out.println(s);
}
}
5.4、trim()
trim()去掉一个字符串的最前面和最后面的空格。
5.5、charAt()
char charAt(int index)返回字符串指定位置的字符,参数index表示指定的位置。
package day01;
/**
* 使用charAt判断字符串是否为“回文”
* @author Administrator
*
*/
public class CharAtDemo2 {
public static void main(String[] args){
/*
* 思路:
* 判断回文的原则:
* 正数位置上的字符与倒数位置上的字符一致
* 0 1 2 3 4 5 6 7 8
*/
String str = "上海自来水来自上海";
for(int i=0;i<str.length()/2;i++){
int last = str.length()-1-i;
if(str.charAt(i)!=str.charAt(last)){
System.out.println("不是回文!");
return;
}
}
System.out.println("是回文");
}
}
5.6、startsWith()、endsWith()
startsWith()和endsWith()检测一个字符串是否以指定字符串开头或结尾。
package day01;
/**
* 检查一个字符串是否是以给定的字符串开始的或结尾的
* @author Administrator
*
*/
public class StartsWithAndEndsWithDemo {
public static void main(String[] args){
String str = "Thinking in Java";
boolean start = str.startsWith("Thin");
boolean end = str.endsWith("Java");
System.out.println("是否以T开头:"+start);
System.out.println("是否以Java结尾:"+end);
}
}
5.7、toUpperCase()、toLowerCase()
toUpperCase()和toLowerCase()转换字符串中英文字母的大小写形式。
package day01;
import java.util.Scanner;
/**
* 将字符串中英文部分转换为大小写
* @author Administrator
*
*/
public class UpperCaseAndLowerCaseDemo {
public static void main(String[] args){
String message = "Af68Zb";
System.out.println("请输入验证码:"+message);
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
//将验证码转换为全小写
message = message.toLowerCase();
//将用户输入的验证码转换为全小写
str = str.toLowerCase();
if(message.equals(str)){
System.out.println("输入正确");
}else{
System.out.println("输入错误");
}
}
}
5.8、valueOf()
valueOf()可以将数字型、布尔型、字符数组型等数据类型转换为字符串类型。
package day01;
/**
* 将其他数据类型转换为字符串类型
* @author Administrator
*
*/
public class ValueOfDemo {
public static void main(String[] args){
double pi = 3.1415926;
//将Double值转换为字符串形式
String piStr = String.valueOf(pi);
System.out.println(piStr);
//将int值转换为字符串形式
String intStr = String.valueOf(1);
//将boolean值转换为字符串形式
String booleanStr = String.valueOf(false);
}
}
六、StringBuilder可变字符串
StringBuilder封装可变的字符串,对象创建后可以通过调用方法改变其封装的字符序列。
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():字符串反转
package day01;
/**
* StringBuilder
* 用于解决频繁修改字符串内容带来的资源消耗过度问题
* 频繁修改字符串的首选
* @author Administrator
*
*/
public class StringBuilderDemo {
public static void main(String[] args){
String str = "努力学习java";
StringBuffer builder = new StringBuffer(str);
//append用于在当前字符串末尾追加给定字符串
builder.append(",为了找个好工作");
str = builder.toString();
System.out.println(str);
/*
* replace(int start,int end,String str)
* 从start(包含)处,到end(不包含)处范围内的
* 字符串替换为给定的字符串str
*
*/
builder.replace(11, builder.length(), "改变世界");
str = builder.toString();
System.out.println(str);
/*
* insert(int offset,String str)
* 在给定的位置offset处插入字符串str
* 原位置及以后的字符串内容自动向后移动
*/
builder.insert(9, "就是");
str = builder.toString();
System.out.println(str);
//delete方法:删除指定范围内的字符串
builder.delete(0, 8);
str = builder.toString();
System.out.println(str);
//活着,就是为了改变世界
builder.insert(0, "活着");
str = builder.toString();
System.out.println(str);
//反转字符串
builder.reverse();
str = builder.toString();
System.out.println(str);
}
}
StringBuilder的很多方法的返回值均为StringBuilder类型,这些方法的返回语句均为: return this。
由于改变封装的字符序列后又返回了该对象的引用,所以可以按如下简洁的方式书写代码:
buf.append("ibm").insert(2,"oracle").replace(9, 13, "Java");
System.out.println(buf.toString());
Java的字符串连接就是利用StringBuilder来实现的。
StringBuffer是线程安全的,同步处理的,性能稍慢
StringBuilder是非线程安全的,并发处理的,性能稍快