String 类及其内部丰富的成员函数,以及 Java 与之相搭配的工具类,是进行字符串解析的重要工具。
- String 对象,将 String 对象转换为 byte[],使用
str.getBytes()
; - Character:
- Character.MIN_VALUE:’\u0000’
- Character.MAX_VALUE:’\uFFFF’
0. String 对象相等性的比较
String str1 = "abcd"'
String str2 = "abcd";
String str3 = "ab" + "cd";
String str4 = "ab";
str4 += "cd";
其中,str1 == str2 == str3
,而不等于 str4
;
1. 常见成员函数
-
切分:split()
-
修建、整理:trim()
- 所谓的修剪、整理,其实就是删除字符串前后的空格(with any leading and trailing whitespace removed.)
- 常和
split()
相搭配,对切分出来的单个字符串删除前后的空格,split("- -")[0].trim()
-
查询相匹配的位置:indexOf()(第一次出现的)、lastIndexOf()(最后一个出现的)
public int indexOf(String str) { return indexOf(str, 0); } public int indexOf(String str, int fromIndex);
-
根据起始和终止位置,截取子串(substring)
String substring(int beginIndex, int endIndex);
可用于截断,比如删除一个 URL 信息开头的 “GET /” 部分:
str = str.substring("GET /".length());
-
以某前缀(prefix)开始,以某后缀(suffix)结束
boolean startsWith(String prefix); boolean endsWith(String suffix);
2. String 与 Char[] 的交互
-
str.getChars() ⇒ 将字符串中的内容拷贝到 char[] 数组中:
public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
String s = "hello"; char[] dst = new char[5]; // char[5] { '\000', '\000', '\000', '\000', '\000' } s.getChars(0, 2, dst, 2); // 从 dst 的第二个数据开始,将 s 的前两个元素复制到 dst 数组中; // char[5] { '\000', '\000', 'h', 'e', '\000' }
3. 重要特性
- 不可变: String 对象是不可变的(public final class String),String 类中每一个看起来会修改 String 值的方法,实际上都会首先创建一个全新的 String 对象,以包含修改后的字符串内容;
- 也即对对原字符串的修改不是 inplace 的,<a href=“http://blog.csdn.net/lanchunhui/article/details/70153734”, target="_blank">【编程】常见概念的理解 —— inplace、vanity url、vanilla(code/software)、编译、链接、build、(delegate、proxy)
- String 对象是不可变的,因此可以给一个 String 对象加任意多的别名,因为 String 对象具有只读特性,所以指向它的任何引用都不可能改变它的值。