1. JDK中包含大量的API类库,所谓API (Application programming interface ,应用程序编程接口)就是一些写好、可以供直接使用的功能(在Java中,这些功能以类的形式封装)
2. JDK API:包含的类库功能强大,经常使用的有:字符串操作、集合操作、文件操作、输入输出操作、网络操作、多线程等。
为了便于使用和维护,JDK尅库按照包结构划分,不同功能的类划分在不同的包中:
经常使用的包如下下表所示:
string 是不可变对象
java.lang.String 使用了 final 修饰,不能被继承
字符串底层封装了字符串以及针对字符数组的操作算法
字符串一旦被创建,对象永远无法修改,但字符串引用可以重新赋值
字符串在内存中使用Unicode 编码方式,任何一个字符对应两个字节的定长编码。
String 常量池
@Test
public void testConstantPool() {
String str1="Hello";
//不会创建新的String对象,而是适应常量翅中已有“hello”
String str2="Hello" ;
System.out.println("str1==str2 :"+str1 == str2); //输出 ?
//使用new 关键字会创建新的String对象
String str3=new String("Hello");
System.out.println("str1==str3 :"+str1 == str3);
}
false
false
内存编码及长度
String 在内存采用Unicode编码,每一个字符占用两个字节;任何一个字符(无论中文还是英文)都算 1 个字符长度,占用两个字节
/*获取String对象的长度 */
@Test
public void testLength() {
String str1="Hello";
System.out.println("Hello.length() :"+str1.length());
String str2="你好";
System.out.println("你好.length() :"+str2.length());
}
Hello.length() :5
你好.length() :2
使用indexOf实现检索
/*去掉一个字符串的前导和后续空字符 */
@Test
public void testTrim() {
String userName="good man";
userName=userName.trim();
System.out.println(userName.length());
System.out.println(userName);
}
8
good man
String中定义有charAt ()方法;
/*遍历一个字符串的字符序列 */
@Test
public void testCharAt() {
String name ="What is Java ?";
for (int i = 0; i < name.length(); i++) {
char c=name.charAt(i);
System.out.println(c+ "");
}
}
W
h
a
t
i
s
J
a
v
a
?
/*检测一个字符串是否以指定字符串开始或结尾 */
@Test
public void testStartWithAndEndWith() {
String str="Thinking in java";
System.out.println(str.endsWith("java")); //true
System.out.println(str.startsWith("T")); //true
System.out.println(str.startsWith("thinking")); //fasle
}
true
true
false
/* 转换字符串中英文字母的大小写形式*/
@Test
public void testToUpperCaseAndToLowerCase() {
String str="我喜欢 Java";
str=str.toUpperCase();
System.out.println(str); //我喜欢Java
str= str.toLowerCase();
System.out.println(str);
}
我喜欢 JAVA
我喜欢 java
@Test
public void testValueOf() {
double pi=3.1415926;
int value=123;
boolean flag=true;
char[] charArr= {'a','b','c','d','e'};
String str=String.valueOf(pi);
System.out.println(str);
str =String.valueOf(value);
System.out.println(str);
str=String.valueOf(flag);
System.out.println(str);
str=String.valueOf(charArr);
System.out.println(str);
}
3.1415926
123
true
abcde
public StringBuilder( )
public StringBuilder(String str)
StringBuilder
stringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语均为:return this
由于改变封装的字符串列后又返回了该对象的引用。可以按照如下简洁的方式书写代码
buf.append ("ibm").append("java").insert(3,"orale").replace(9,13,"JAVA");
System.out.println(buf.toString());
@Test
public void testAppend() {
StringBuilder buf=new StringBuilder("Programming Language");
buf.append("java").append("cpp")
.append("php").append("c#").append("objective-c");
System.out.println(buf.toString());
}
@Test
public void testInsert() {
StringBuilder buf=new StringBuilder("javacppphpc#objective-c");
buf.insert(9, "php");
System.out.println(buf);
}
javacppphphppc#objective-c
@Test
public void testDelete() {
StringBuilder buf =new StringBuilder("javaoralecpp#php") ;
buf.delete(4, 4+6);
System.out.println(buf);
}
javapp#php