这一章是关于Java中基本的API的应用,需要记忆的知识点比较多,在学习过程中,大家注意记录知识要点。
1. Creating and Manipulating Strings
一般我们有两种方法创建 String
String name = "Fluffy"; // stored in String pool
String name = new String("Fluffy"); // stored in heap as normal object
-
Concatenation
以下几点关于Concatenation:- 如果两个元素都是数字, " + " 代表加法
- 如果其中一个为String, " + " 代表Concatenation
- 表达式从左往右运算
System.out.println(1 + 2); // 3 System.out.println("a" + "b"); // ab System.out.println("a" + "b" + 3); // ab3 System.out.println(1 + 2 + "c"); // 3c
-
Immutability
当String被创建后, 此String的值不可被改变,此被成为String的不可变性(Imutability)。String s1 = "1"; String s2 = s1.concat("2"); s2.concat("3"); System.out.println(s2); // 1, String 是 Immutability的
-
The String Pool
String Pool 的目的是实现 String可重复使用,节省内存空间
没有被存入String pool 的String 会像正常的对象一样 被垃圾回收机制所回收。myObject.toString();// 不会被存入 String pool String name = new String("Fluffy"); // 不会被存入 String pool String name = "Fluffy"; // 被存入 String pool
-
Important String Methods
这里列出常用的方法,具体细节请参阅源码- length() : 返回字符的数量
- charAt(int index):返回index所在的对应字符
- indexOf():返回第一个match的index
- substring()
int substring(int beginIndex) int substring(int beginIndex, int endIndex) // [beginIndex, endIndex), 包括begin,不包括end。 String string = "animals"; System.out.println(string.substring(3)); // mals System.out.println(string.substring(string.indexOf('m'))); // mals System.out.println(string.substring(3, 4)); // m System.out.println(string.substring(3, 7)); // mals
-
Method Chaining
我们可以对同一个String 调用多个方法String start = "AniMaL "; String trimmed = start.trim(); // "AniMaL" String lowercase = trimmed.toLowerCase(); // "animal" String result = lowercase.replace('a', 'A'); // "Animal" System.out.println(result); 每次调用String的方法都会生成 new String,因为String 的 Immutability。
2. Using the StringBuilder Class
-
Mutability and Chaining
和String 不同, StringBuilder 每次调用方法会改变自身状态, 返回的Reference指向自己。如下:1: StringBuilder sb = new StringBuilder("start"); 2: sb.append("+middle"); // sb = "start+middle" 3: StringBuilder same = sb.append("+end"); // "start+middle+end"
-
Creating a StringBuilder
StringBuilder sb1 = new StringBuilder(); //containing an empty value StringBuilder sb2 = new StringBuilder("animal"); // containing a specific value and assign sb2 StringBuilder sb3 = new StringBuilder(10); // 保留给定大小的空间
-
Important StringBuilder Methods
这里仅列举一些常用的方法以供参考, 完整版请看源码-
charAt(), indexOf(), length(), and substring()
这4个方法和String Class 里的方法一样,以下是一些例子StringBuilder sb = new StringBuilder("animals"); String sub = sb.substring(sb.indexOf("a"), sb.indexOf("al")); int len = sb.length(); char ch = sb.charAt(6); System.out.println(sub + " " + len + " " + ch); // 输出: anim 7 s
-
append()
这个方法使用频率很高, 要明确 append 是在对当前String直接进行操作,把目标String插入尾部,并返回当前StringBuilder对象。而 String str +="…" 是copy一个新的String 再操作。StringBuilder append(String str)
-
insert()
和append 比较相似, insert 可以把String 插入任意目标位置, 并返回当前StringBuilder对象StringBuilder insert(int offset, String str)
-
delete() and deleteCharAt()
delete方法可以指定范围内的String,并返回当前StringBuilder对象StringBuilder delete(int start, int end)
deleteCharAt 主要用于删除指定位置的单个字符,并返回当前StringBuilder对象
StringBuilder deleteCharAt(int index)
-
reverse()
reverse 会反转当前String 并返回当前StringBuilder对象, 无需传参。StringBuilder reverse()
-
toString()
把Stringbuilder 对象转化为String 对象。String toString()
-