内容摘要:
- API概述
- String类(字符串类)
- StringBuilder类(字符串缓冲区类)
1. API概述
1.1 概述:
API(Application Programming Interface)应用程序编程接口,Java中的API是指JDK中提供的各种功能的Java类.
1.2 使用方法:
a). 使用API文档中的索引功能搜索需要查询的Java类.
b). 搜索到相关的类,需要关注一下几点:
类所处的包,如果是java.lang包下的,使用时就不需要导包;
类的描述信息,就是弄清楚该类的功能;
构造方法:用于创建该类的对象的方式有哪些;
成员方法:关注返回值类型,方法名,形式参数.
2. String类
2.1 String类概述:
String 类代表字符串,Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现;
字符串是常量;它们的值在创建之后不能更改;
字符串的本质是一个字符数组;
字符串是一种较为特殊的引用数据类型,直接输出字符串对象输出的是该对象中的数据.
2.2 String类构造方法:
String(String original):把字符串数据封装成字符串对象;
String(char[] str):把字符数组的数据封装成字符串对象;
String(char[] value,int index,int count):把字符数组中的一部分数据封装成字符串对象,index是开始的索引值,count是字符的个数;
2.3 通过构造方法和直接赋值方式创建的字符串对象区别:
构造方法创建的字符串对象是在堆内存中,直接赋值创建的字符串对象是在方法区的常量池.
案例:
public class StringDemo {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "hello";
// s1和s2指向方法区中常量池中的同一个字符串对象,所以输出的地址值相同
System.out.println((s1==s2)); // true
s1 = "helloWorld";
// 将s1的值重新赋值,相当于是在常量池中重新创建一个字符串对象,则结果是false
System.out.println((s1==s2)); // false
// 由于s1指向的字符串对象发生改变,但是s2还是指向之前的那个字符串,所以s2输出结果不变
System.out.println(s2); // hello
String s3 = new String("hello");
String s4 = s3;
// 将s4也指向堆内存中那个字符串对象,则此时s3和s4的地址值相等
System.out.println(s3==s4); // true
// 将s3指向一个新的字符串,相当于是s3指向了常量池中的字符串对象
s3 = "helloworld";
// s3指向常量池中的字符串对象,s4是指向堆内存中的字符串实体,通过实体再指向常量池中的字符串
// 则s3和s4的地址值不同
System.out.println(s3==s4); // false
// s3和s4指向的字符串对象不同,则输出的字符串不同
System.out.println(s3); // helloworld
System.out.println(s4); // hello
}
}
2.4 字符串的判断功能(成员方法): 返回值为boolean类型
boolean equals(Object obj):比较两个字符串的内容是否相同,其中参数可以是任意object的子类对象;
boolean equalsIgnoreCase(String str):比较两个字符串的内容是否相同,忽略大小写;
boolean startsWith(String str):判断字符串对象是否以指定的str开头;
boolean endsWith(String str):判断字符串对象是否以指定的str结尾.
2.5 String类的获取功能:
int length():获取字符串的长度,就是字符的个数;
char charAt(int index):获取指定索引处的字符,索引值必须存在,否则会报索引越界异常;
int indexOf(String str):获取字符串str在字符串对象中首次出现的索引,如果不是单个字符,则返回str中第一个字符的索引,如果不存在返回-1;
String substring(int start):从Start索引处截取到结束的子串;
String substring(int start, int end):从Start(包含)索引处截取到end索引(不包含)为止的子串.
案例:
public class StringDemo3 {
public static void main(String[] args) {
String s = "HelloSomnus";
// int length()
System.out.println(s.length());
// char charAt(int index)
System.out.println(s.charAt(7)); // m
// System.out.println(s.charAt(12)); // java.lang.StringIndexOutOfBoundsException异常
// int indexOf(String str)
System.out.println(s.indexOf("S")); // 5
System.out.println(s.indexOf("Som")); // 5 是str字符串首字母首次出现的索引
System.out.println(s.indexOf("h")); // -1表示字符串不存在
// String substring(int start)
System.out.println(s.substring(5)); // Somnus
// System.out.println(s.substring(13)); // java.lang.StringIndexOutOfBoundsException异常
// String substring(int start, int end)
System.out.println(s.substring(5, 8)); // Som,包含开始索引,不包含结束索引
}
}
2.6 String的转换功能:
char[] toCharArray():把字符串转换为字符数组;
String toLowerCase():把字符串转换为小写字符串;
String toUpperCase():把字符串转换为大写字符串.
案例:
public class StringDemo4 {
public static void main(String[] args) {
String s = "helloWorld";
// char[] toCharArray()
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}
// String toLowerCase()
String s1 = s.toLowerCase();
System.out.println(s1);
// String toUpperCase()
String s2 = s.toUpperCase();
System.out.println(s2);
}
}
2.7 String类的其他功能:
String trim():取出字符串两端的空格,返回字符串对象;
String[] split(String str):按照指定str分割字符串,结果为字符串数组.
案例:
public class StringDemo5 {
public static void main(String[] args) {
String s = "aabbcc";
String[] s1 = s.split("b");
System.out.println(s1.length);
for (int i = 0; i < s1.length; i++) {
System.out.println(s1[i].length());
System.out.println(s1[i]);
}
}
}
3. StringBulider类
3.1 StringBulider类概述:
是一个可变长的字符串,属于字符串缓冲区类;
StringBulider也是一种较为特殊的引用数据类型,直接输出的是该对象中的数据.
3.2 String和StringBuilder的区别:
String的内容是固定的(在常量池中一旦生成无法改变);
StringBuilder是可变长度的字符串;
String使用+做字符串拼接时,效率较低并浪费空间.
3.3 StringBuilder构造方法:
StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符;
StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容.
3.4 StringBuilder成员方法:
public int capacity():返回当前容量(容器的理论容量).容量指可用于最新插入字符的存储量,超过这一容量便需要再次分配;
public int length():返回长度(字符数),已经存储的字符个数;
public StringBuilder append(任意类型):将参数追加到此对象值得后面,返回其本身;
public StringBuilder reverse():将自身字符反转,并返回其本身.
3.5 String与StringBuilder之间的转换:
StringBuilder->String: StringBuilder对象通过其toString方法转换为String对象;
String->StringBuilder: 通过StringBuilder的构造方法可以得到String对象.
案例:
/*
* StringBuilder:是一个可变长的字符串,属于字符串缓冲区类.
* 构造方法:
* StringBuilder():构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符.
* StringBuilder(String str):构造一个字符串生成器,并初始化为指定的字符串内容.
* 成员方法:
* public int capacity():返回当前容量(容器的理论容量).容量指可用于最新插入字符的存储量,超过这一容量便需要再次分配.
* public int length():返回长度(字符数),已经存储的字符个数.
* public StringBuilder append(任意类型):将参数追加到此对象值得后面,返回其本身.
* public StringBuilder reverse():将自身字符反转,并返回其本身.
*/
public class StringBuilderDemo {
public static void main(String[] args) {
// 空参构造方法
StringBuilder sb1 = new StringBuilder();
System.out.println(sb1.capacity()); // 16初始化时分配的容量
System.out.println(sb1.length()); // 空字符,代表当前没有存储字符
// 有参构造方法,将初始值设为指定字符串
StringBuilder sb2 = new StringBuilder("hello");
System.out.println(sb2.capacity()); // 21代表当前的容量,总会有16个字节的空余空间
System.out.println(sb2.length()); // 5代表当前存储的字符个数
// public StringBuilder append(任意类型),返回值为其本身,故可以链式编程
sb2.append("world");
sb2.append(12.34);
System.out.println(sb2); // helloworld12.34
sb2.append("somnus").append(3.14).append(true);
System.out.println(sb2); // helloworld12.34somnus3.14true
// public StringBuilder reverse()
sb2.reverse();
System.out.println(sb2); // eurt41.3sunmos43.21dlrowolleh
}
}