思维导图

字符串类 String

创建对象

基本创建语句如下

1
2
3
4
5
char[] data = {'1'};
String str1 = new String(str1);
String str2 = new String("liudidi");
String srt3 = 'liudidi'; //字符常量
String str4 = 'liudidi';

在Java中String 类是不可变的,也就是固定。接下来使用的任何一种方法都只是引用其中的对象值而已,然后创建一个新的字符对象,与之前的对象没有任何关系。因为是对所有的字符串而言,包括字符常量字串在Java中都是对象,而不是一个值。

所以,在Java中,虽然str2 与 str3 的值是相等的,但是如果使用 str2 == str3 返回值是一个false.因为这是对象值而已。

但是同样,在Java系统中,为了减少内存空间的使用,默认将所有文字常量都是共享一个String对象,应该放在字符串池中,从而方便使用。

如str3 == str4 返回一个true的值。

对象操作

对一个类的认识,关键两点在于除了关注如何创建以外,还应该是如何操作其中的方法当然类似之前的内容,这个是对象的引用值,任何方法的使用都是在创建一个新的String对象。

字符串长度

求解字符串长度的方法只有一个

1
2
String str = 'liudidi';
str.length(); //放回字符串长度,注意是,这个是不可变的。

字符串比较

在字符串不能使用 == 或者是 使用!= 进行比较的时候,可以使用String中的常用四个方法

1
2
3
4
public boolean equals(Object anObject); // 区别大小写对两个字符串进行比较
public boolean equalsIgnoreCase(String anotherString); //不区别大小写进行比较
public int compareTo(String anotherString); // 区别大小写比较大小,完全相等返回0,左对象的值,大于参数对象的值,返回正数,否则返回负数。
public int compareTOIgnoreCase(String str) // 不区别大小写

字符串连接

对字符串进行连接时可以用String 中自带的.concat()函数,也可以使用的+号作为连接符进行运算。

例子

1
2
3
4
String str1 = 'liudidi';
String str2 = 'niubi';
String str3 = str1 + ' ' + str2; //返回结果与后面那条类似
String str4 = str1.concat(str2);

获取单个字符的索引值

给定一个字符,寻找这个字符第一次所在的索引值。

1
2
3
4
public int indexOf(char ch); // 从左到右查找返回第一个所在的索引值
public int indexOf(char ch,int fromIndex); //从指定处往右边查找
public int lastIndexof(char ch); //从右往左
public int lastIndexof(char ch, int fromIndex); // 从指定处往右边查找

获取单个字符串的索引

具体函数如下

1
2
3
4
5
6
7
public int indexOf(String str); // 从左到右查找返回第一个所在的索引值
public int indexOf(String str,int fromIndex); //从指定处往右边查找
public int lastIndexof(String str);
public int lastIndexof(String str, int fromIndex);

public boolean startsWith(String prefix);// 是否以字符串prefix为开头
public boolean endsWith(String prefix) // 是否以字符串prefxi为开头

提取子字符串

提取当前的字符床作为子字符串

1
2
3
String str = 'liudidi';
str.substring(1); //返回 iudidi
str.substring(1,2) // 返回 i。 第一个参数是开始参数,第二数十结束参数

字符串转变为数组

使用方法toCharArray

1
2
3
String str = 'liudidi';

char[] chs = str.toCharArray();

下面的方法,可以返回单个字符

1
char ch = str.charAt(1) //返回 i

转换字符串

创建新字符串对象放回当前字符的大/小写形式

1
2
String str1 = "Java".toLowerCase(); // str1 = 'java'
String str2 = "Java".toUpperCase(); // str2 = "JAVA"

替换字符串中的字符。用右边参数的值替换右边参数的值

1
public String replace(char OldChar, char newChar);

清除两边空格字符

1
public String trim();

字符串格式化

调用静态方法,可以将格式化字符串format中的嵌入的一个或者多个格式说明符替换成可变参数列表args中相应参数的相应文本表现形式

1
2
3
4
int num1 = 1;
double num2 = 2.0;

String str = String.format("num1 = %d, num2 = %f",num1,num2) //类似C中的Printf语句

类StringBuilder / 类 StringBuffer

String类是不可变的。所以在对对象进行操作时,会引用出许多的中间String对象。为了减少对象的增加,减少内存的占比。引入了SrirngBuiler 和 StringBuffer类

在多线程时String Buffer 是安全的,平时使用时StringBuilder的速度更快。

创建对象

两者在创建对象时,方式类似。因为其中的构造方法类似。

1
2
3
4
5
6
public StringBuilder();
// 创建容量初始为16字符且其中没右字符的StringBuiler对象
public StringBuilder(int capacity);
// 创建容量初始为capacity字符且其中没右字符的StringBuiler对象
public StringBuilder(String str);
// 创建容量初始为str长度加上16且其中字符为str的StringBuiler对象

插入和追加操作

1
2
3
StringBuilder strBuilder = new StringBuilder("liudidi")
str.append("haha"); // 返回liudidihaha
str.insert(6,'kk'); // liudidkki

其他常用操作

1
2
3
4
5
6
7
public int capacity();
public StringBuilder delete(int start,int end);
public StringBuilder deleteCharAt(int index);
public StringBuilder replace(int start,int end, String str);
public StringBuilder reverse();
public void setCharAt(int index,char ch);
public void setLength(int newLength);