今天来探讨Java字符串,那么让我们开始吧。
Java字符串
Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做 String 。每个用双引号括起来的字符串都是 String 类的一个实例:
String e = ""; // an empty string
String greeting = "Hello";
子串
String 类的 substring 方法可以从一个较大的字符串中提取一个子串。例如:
String greeting = "Hello";
String s = greeting.substring(0,3);
创建了一个由字符“Hel”组成的字符串。
很好理解, Substring 方法是从0开始计时,直到3为止,但不包括3。该方法有一个优点:可以很容易的计算子串的长度,字符串 s.substring(a, b) 的长度为 b-a 。
拼接
与绝大多数程序设计语言一样,Java允许使用 + 号连接(拼接)两个字符串。
String a = "in";
String b = "sane";
String c = a + b;
拼接成的字符串为 “insane” 。
注意: 单词之间没有空格, + 号按照指定的次序将两个字符串拼接起来。
还有一点比较重要: 将一个字符串和一个非字符串进行拼接时,后者被转化成字符串。
如果需要把多个字符串放在一起,用一个字符串分隔,可以使用静态 jion 方法。
String all = String.join(" / ","s","m","l","xl");
// all is the string "s / m / l / xl"
不可变字符串
String 类没有提供用于修改字符串的方法。如果希望将 greeting 的内容修改为 “Hellp!” ,不能像C++一样直接将 greeting 的最后两个位置的字符修改为 ‘p’ 和 ‘!’。那么Java怎样实现相同的效果呢? 答案是:提取、拼接。
greeting = greeting.substring(0, 3) + "p!";
这样,便得到了相同的结果。
由于不能修改Java字符串中的字符,所以在Java文档中将 String 类对象称为 不可变字符串 。如同数字3永远是3一样,字符串 “Hello” 永远包含 H、e、l、l 和 o 的代码单元序列,不能修改其中的任何一个字符。当然,可以修改字符串变量 greeting ,让它引用另外一个字符串,这就如同可以将存放3的数值变量改成存放4一样。
检测字符串是否相等
可以使用 equals 方法检测两个字符串是否相等。对于表达式:
s.equals(t)
如果字符串 s 和字符串 t 相等,则返回 true ;否则,返回 false 。
要想检测出两个字符串是否相等,而不区分大小写,可以使用 equalsIgnoreCase 方法:
"Hello".equalsIgnoreCase("hEllo")
注意: 一定不要使用 == 运算符检测是否相等! 这个运算符只能确定两个字符串是否在同一位置上。
空串与null串
空串 “” 是长度为 0 的字符串。下列代码可以检查一个字符串是否为空:
if(str.length() == 0)
或者
if(str.equals(""))
空串是一个Java对象,有自己的空长度(0)和内容(空)。不过,String 变量还可以存放一个特殊的值,名为 null,这表示目前没有任何对象与该变量关联。要检查一个字符串是否为 null,要使用以下条件:
if(str == null)
检查一个字符串不为 null 的原因: 如果在一个 null 值上调用方法,会出现错误。
构建字符串
有时候需要用较短的字符串构建字符串,例如,按键或来自文件中的单词。采用字符串连接的方式达到此目的效率比较低。每次连接字符串,都会构建一个新的 String 对象,既耗时,又浪费空间。使用 StringBuilder 类可以避免这个问题的发生。
如果需要用很多小段的字符串构建一个字符串,那么应该按照下列步骤进行。
首先,构建一个空的字符串构建器:
Stringbuilder builder = new StringBuilder();
当每次需要添加一部分内容时,就调用 append 方法:
builder.append(ch); // appends a single character
builder.append(str); // appends a string
在需要构建字符串时就调用 toString 方法,就可以得到一个 String 对象:
String completedString = builder.toString();
Java API文档
如果想查阅 API 文档,请点击 这儿 ,可以查阅到标准类库中所有类和方法。