一、基本原理
在Java文档中将String类对象称为不可变字符串,Java字符串中的字符是不能修改的。这一点和C++不同,C++中字符串时可以修改的,C++中string类底层是用动态数组的方式实现的,可变长度,内容自然也是能修改的。
不可变字符串有一个优点:编译器可以让字符串共享。我们可以想象,各种字符串存放在公共的存储池中(字符串常量池),字符串变量指向存储池中相应的位置,如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。
Java的设计者认为共享带来的高效率远远胜于提取、拼接字符串带来的低效率。但是,有些时候,程序中需要由较短的字符串拼接成较长的字符串,每次连接字符串,都会构建一个新的String类对象,既耗时又占空间,这时候就应该选择StringBuilder类就能避免这个问题。
二、用法
初始化
初始化 | |
---|---|
String s1 = new String(“hello world!”); | 创建一个字符串对象,内容为"hello world!" |
String s1 = “hello world!”; | 创建一个字符串对象,内容为"hello world!" |
String s1 = new String(); | 创建一个空字符串对象 |
char c1[] = {‘h’,‘e’,‘l’,‘l’,‘o’}; String s1 = new String(c1); | 创建一个字符串对象,内容为"hello" |
byte b1[]={104,101}; String s1 = new String(b1); | 创建一个字符串对象,内容为"he" |
String s1=new String("Hello world!"); // 创建一个字符串对象,内容是"Hello world!"
String s2="Hello world!"; // 效果同上一句
String s3 = new String(); // 创建一个空字符串
char c[] = {
'h','e','l','l','o'};
String s4 = new String(c); // 用字符数组创建一个字符串对象,内容是"hello"
byte b1[]={
104,101};
String s5 = new String(b1); // 用字节数组创建一个字符串对象,内容是"he"
访问元素
访问元素 | |
---|---|
s1.charAt(int index); | 返回下标为index的字符 |
char c1=s1.charAt(1); // 返回下标为1的字符,此处返回'e'
字符串长度
s1.length(); | 返回值为字符串的长度 |
---|---|
s1.isEmpty(); | 字符串为空则返回true,否则返回false |
int len=s1.length(); // 返回字符串s1的长度,此处为12
boolean isE=s1.isEmpty(); // s1为空,返回true。此处返回false
查找
s1.contains(String s2); | s1中包含s2则返回true,否则返回false |
---|---|
s1.indexOf(char element); | 返回字符element在s1中第一次出现的位置,如果s1中没有则返回-1 |
s1.indexOf(char element,int index); | 返回字符element 从s1的index位置开始,第一次出现的位置,如果没有则返回-1 |
s1.indexOf(String s2); | 返回字符串s2在s1中第一次出现的位置,如果s1中没有s2则返回-1 |
s1.indexOf(String s2,int index); | 返回字符串s2 从s1的index位置开始,第一次出现的位置,如果没有则返回-1 |
s1.lastIndexOf(char element); | 返回字符element在s1中最后一次出现的位置,如果s1中没有则返回-1 |
< |