CoreJavaE10V1P3.6 第3章 Java的基本编程结构-3.6 字符串 String

String类(java.lang.String)就是Unicode字符序列,例如:"Java\u2122"

3.6.1 Substring 提取子串

String greeting = "Hello";
String s = greeting.substring(0, 3);
s结果为“Hel”

3.6.2 字符串拼接

int age = 13;
String rating = "PG" + age;
rating 结果为 "PG13"

3.6.3 字符串的不可变性

Java中没有一个方法可以直接修改字符串中的某个字符,只能通过 提取子串与拼接 间接实现。例如:

greeting = greeting.substring(0, 3) + "p!";

将greeting 由 “Hello”修改为“help”

3.6.4 判断字符串是否相等

s.equals(t)
"Hello".equals(greeting)
"Hello".equalsIgnoreCase("hello")
equals 用于判断两个字符串的值是否相等 String greeting = "Hello"; //initialize greeting to a string
if (greeting == "Hello") . . .
// probably true
if (greeting.substring(0, 3) == "Hel") . . .
// probably false
== 用于判断两个是否为同一个字符串,即存储地址是否相同

3.6.5 空字符串与Null字符串

空字符串是长度为0的字符串,可用如下方法判定:

if (str.length() == 0)
if (str.equals(""))

空字符串的内容为空,而Null字符串不为空,存储的值是 null

if (str != null && str.length() != 0)

用于判断一个字符串既不是空,又不是null。

3.6.6 字符串的编码点与编码单元 (Code Points and Code Units)

Java 的 String 由 char 序列构成,而 char是UTF-16编码的编码序列,UTF-16是用于表示Unicode 的编码点的。即:编码点是编码字符串的最小单元,一个编码点的内容由UTF-16 表示,也就是char,但是有些Unicode字符由2个(一对)编码单元构成,例如( U+1D546)也就是一个unicode有多个UTF-16,多个char,一个unicode就是一个编码点。

String greeting = "Hello";
int n = greeting.length(); // is 5.

length 返回的是String的编码单元的数量。

如果要得到String只能中字符的真正的数目,也就是编码点的数量,使用下列方法:

int cpCount = greeting.codePointCount(0, greeting.length());
char first = greeting.charAt(0); // first is 'H'
char last = greeting.charAt(4); // last is 'o'

charAt方法返回的也是 编码单元处的内容。

如果要获取第i个编码点,也就是第i个真正的字符,可以使用下列方法

int index = greeting.offsetByCodePoints(0, i);
int cp = greeting.codePointAt(index);

3.6.7 String API

String类有很多方法,重要的如下:

char charAt(int index)
returns the code unit at the specified location.You probably don’t want to call this method unless you are interested in low-level code units.
• int codePointAt(int index) 5.0
returns the code point that starts at the specified location.
• int offsetByCodePoints(int startIndex, int cpCount) 5.0
returns the index of the code point that is cpCount code points away from the code point at startIndex .
• int compareTo(String other)
returns a negative value if the string comes before other in dictionary order, a positive value if the string comes after other in dictionary order, or 0 if the strings are equal.
• IntStream codePoints() 8
returns the code points of this string as a stream. Call toArray to put them in an array.
• new String(int[] codePoints, int offset, int count) 5.0
constructs a string with the count code points in the array starting at offset .
• boolean equals(Object other)
returns true if the string equals other .
• boolean equalsIgnoreCase(String other)
returns true if the string equals other , except for upper/lowercase distinction.
• boolean startsWith(String prefix)
• boolean endsWith(String suffix)
returns true if the string starts or ends with suffix int indexOf(String str)
• int indexOf(String str, int fromIndex)
• int indexOf(int cp)
• int indexOf(int cp, int fromIndex)
returns the start of the first substring equal to the string str or the code point cp ,starting at index 0 or at fromIndex , or -1 if str does not occur in this string.
• int lastIndexOf(String str)
• int lastIndexOf(String str, int fromIndex)
• int lastindexOf(int cp)
• int lastindexOf(int cp, int fromIndex)
returns the start of the last substring equal to the string str or the code point cp ,starting at the end of the string or at fromIndex .
• int length()
returns the number of code units of the string.
• int codePointCount(int startIndex, int endIndex) 5.0
returns the number of code points between startIndex and endIndex - 1 .
• String replace(CharSequence oldString, CharSequence newString)
returns a new string that is obtained by replacing all substrings matching oldString in the string with the string newString .You can supply String or StringBuilder objects
for the CharSequence parameters.
• String substring(int beginIndex)
• String substring(int beginIndex, int endIndex)
returns a new string consisting of all code units from beginIndex until the end of the string or until endIndex - 1 .
• String toLowerCase()
String toUpperCase()
returns a new string containing all characters in the original string, with uppercase characters converted to lowercase, or lowercase characters converted to uppercase.
• String trim()
returns a new string by eliminating all leading and trailing whitespace in the original string.
• String join(CharSequence delimiter, CharSequence... elements) 8 Returns a new string joining all elements with the given delimiter.

3.6.8 在线阅读API文档

Java的文档保存在JDK 安装目录的docs/api/index.html(如果安装的话)

3.6.9 构建String

有时候需要把一些短的字符串构建成一个长的字符串,如果使用连接(+)的方法,费时,非空间,这里提供StringBuilder类(java.lang.StringBuilder)解决此问题。

StringBuilder builder = new StringBuilder();
builder.append(ch); // appends a single character
builder.append(str); // appends a string
String completedString = builder.toString();
上一篇:PHP生成二维码图片


下一篇:c语言字符串转OC字符串