大部分编程语言都能够处理 字符串(String)。字符串是有序的字符集合,比如 "Hello World!"
。在 Java 中,字符串被存储为 String
类对象。调用字符串对象的方法,可以实现字符串相关的操作。
String
类包含在 java.lang
包中。这个包会在 Java 启动的时候自动 import
,所以可以当做一个 内置类(built-in class)。我们不需要显式的使用 import
引入 String
类。
创建字符串
我们之前使用类来创建对象。需要注意的时候,创建 String
类对象不需要 new
关键字。比如:
public class Test
{
public static void main(String[] args)
{
String s = "Hello World!";
System.out.println(s);
}
}
输出:
Hello World!
实际上,当你写出一个 "Hello World"
表达式时,内存中就已经创建了该对象。如果使用 new String("Hello World!")
,会重复创建出一个字符串对象。
String
类是唯一一个不需要 new
关键字来创建对象的类。使用的时候需要注意。
字符串操作
可以用 +
实现字符串的连接(concatenate),比如:
"abc" + s
字符串的操作大都通过字符串的相应方法实现,比如下面的方法:
方法 | 效果 |
---|---|
s.length() | 返回 s 字符串长度 |
s.charAt(2) | 返回 s 字符串中下标为 2 的字符 |
s.substring(0, 4) | 返回 s 字符串中下标 0 到 4 的子字符串 |
s.indexOf("Hello") | 返回子字符串 "Hello" 的下标 |
s.startsWith(" ") | 判断 s 是否以空格开始 |
s.endsWith("oo") | 判断 s 是否以 "oo" 结束 |
s.equals("Good World!") | 判断 s 是否等于 "Good World!" ,== 只能判断字符串是否保存在同一位置。需要使用 equals() 判断字符串的内容是否相同。 |
s.compareTo("Hello Nerd!") | 比较 s 字符串与 "Hello Nerd!" 在词典中的顺序,返回一个整数,如果 <0,说明 s 在"Hello Nerd!"之前;如果 >0,说明 s 在 "Hello Nerd!" 之后;如果 ==0,说明 s 与 "Hello Nerd!" 相等。 |
s.trim() | 去掉 s 前后的空格字符串,并返回新的字符串 |
s.toUpperCase() | 将 s 转换为大写字母,并返回新的字符串 |
s.toLowerCase() | 将 s 转换为小写,并返回新的字符串 |
s.replace("World", "Universe") | 将 "World" 替换为 "Universe",并返回新的字符串 |
不可变对象
String
类对象是 不可变对象(immutable object)。程序员不能对已有的不可变对象进行修改。我们自己也可以创建不可变对象,只要在接口中不提供修改数据的方法就可以。
然而,String
类对象确实有编辑字符串的功能,比如 replace()
。这些编辑功能是通过创建一个新的对象来实现的,而不是对原有对象进行修改。比如:
s = s.replace("World", "Universe");
右边对 s.replace()
的调用将创建一个新的字符串 "Hello Universe!"
,并返回该对象的引用。通过赋值,引用 s 将指向该新的字符串。如果没有其他引用指向原有字符串 "Hello World!"
,原字符串对象将被垃圾回收。