字符串操作
- 1、String类
- 1.1 声明字符串
- 1.2 创建字符串 =
- 1.3 字符串连接 +/+=
- 连接字符串
- 连接其他数据类型
- 1.4 提取字符串信息
- 获取字符串长度length()
- 获取指定位置的字符 charAt()
- 获取子字符串索引位置 indexOf()
- 判断字符串首尾内容 startsWith()/endsWith()
- 获取字符数组 toCharArray()
- 判断子字符串是否存在 contains()
- 1.5 字符串操作
- 截取字符串 substring()
- 字符串替换 replace()
- 字符串分割 split()
- 大小写转换 toLowerCase()/toUpperCase()
- 去除空白内容 trim()
- 比较字符串是否相等 equals()
- 2、StringBuffer类
- 2.1 创建对象
- 2.2 追加字符序列 append()
- 2.3 修改指定索引处的字符 setCharAt()
- 2.4 插入字符串 insert()
- 2.5 字符串反序 reverse()
- 2.5 删除字符串 delete()
1、String类
1.1 声明字符串
字符串是常量,他们可以显示任何文字信息,字符串的值在创建后不能更改。Java语言中双引号的内容表示字符串,单引号的内容表示字符。
Java通过java.lang.String这个类来创建可以保存字符串的变量,所以字符串变量是一个对象。
声明字符串变量:
String a;
String a,b;
- 在不给字符串赋值的情况下,其默认值是NULL。如果调佣String的方法,则会发生空指针异常。
1.2 创建字符串 =
对字符串变量赋值:
- 引用字符串常量
String a = "时间就是金钱";
String str1, str2;
str1 = "good good study";
str2 = "day day up";
- 利用构造方法实例化
String a = new String("I like motorcycle!");
String b = new String(a);
- 利用字符数组实例化
char[] charArray = {'t','i','m','e'};
String a = new String(charArray);
- 提取字符数组中的一部分创建字符串对象
char[] charArray = {'t','i','m','e'};
String a = new String(charArray, 1, 2); //从第1个索引开始,提取两个元素
1.3 字符串连接 +/+=
连接字符串
使用"+”和"+=”运算符可以实现多个字符串的连接,并产生一个String对象。
public class StringConcatenation{public static void main(String[] args){String a = "时间就是金钱";String a = "浪费时间可惜";String c = a + ',' + b;String d = "珍惜每时每刻,做有意义的事情。";d += c; //d = d + c ; 连接字符串 System.out.printIn("a=" + a);System.out.printIn("a=" + a);System.out.printIn("a=" + a);System.out.printIn("a=" + a);}
}
Note:
-
Java中相连的字符串不能直接分成两行,如果字符串太长需要分成两行,利用+进行连接。但是连接两个字符串后,原先的字符串不会发生变化。但是在内存中会生成一个新的字符串。字符串是常量,在内存中是不可改变的。
-
String自带的concat()可以实现将指定字符串连接到此字符串结尾的功能。
a.concat(str); //a为原字符串,str原字符串末尾拼接的字符串
连接其他数据类型
字符串也可以同其他基本数据类型进行连接。如果将字符串同这些数据类型的数据进行连接,会将这些数据直接转换成字符串。
Note:
- 只要“+”运算符的一个操作数是字符串,编译器就会将另一个操作数转换成字符串形式,使用时需要谨慎。
- 字符串在计算公式中的先后顺序会影响运算结果。先到先得
String a = "1"+ 2 + 3 + 4; // “1234”
String b = 1 + 2 + 3 + "4"; // “64”
String a = "1"+ (2 + 3 + 4); // “19”
1.4 提取字符串信息
获取字符串长度length()
length()方法会返回字符串数量,获取字符串长度,也就是char的数量。
str.length();//example
String num = "12345 67890";
int size = num.length(); //11
Note:字符串的length()方法与数组的length属性都是用来获取长度,但是两者是不同的:一个是方法,一个是成员属性。
获取指定位置的字符 charAt()
charAt(int index)方法用来获取指定索引的字符。
str.charAt(index); //str任意字符串对象;index为char值的索引
Note:索引是从0开始的。
获取子字符串索引位置 indexOf()
indexOf()方法返回的是搜索的字符或字符串在字符串中首次出现的索引位置,如果没有索引到查找的字符或字符串,则返回-1.
str.indexOf(substr); //str任意字符串对象;substr为要搜索的字符或字符串String str = "We are the team";
int addr = str.indexOf('e'); //值为1
Note:
- 应用场景:日常开发中,经常会遇到判断一个字符串是否包含在某个字符或者某个子字符串中的情况,此时采用indexOf()方法。
判断字符串首尾内容 startsWith()/endsWith()
startsWith()方法和endsWith()方法分别用于判断字符串是否以指定的内容开始或结束,这两个方法的返回值都是boolean类型。
str.startsWith(prefix); //str为任意字符串;prefix为作为前缀的字符串
str.endsWith(suffix); //str为任意字符串;suffix指定的后缀的字符串
获取字符数组 toCharArray()
toCharArray()方法可以将字符串转换成一个字符数组。
str.toCharArray(); //str为任意字符串
public class StringToArray{public static void main(String[] args){String str= "这是一个字符串"; //创建一个字符串char[] ch = str.toCharArray(); //将字符串转换为字符数组for(int i = 0;i < ch.length;i++){ //遍历字符数组System.out.printIn("数组第" + i + "个元素为:" + ch[i]); //输出数组元素}}
}
判断子字符串是否存在 contains()
contains()方法可以判断字符串中是否包含指定的内容,返回值为true和false.
str.contains(string); //str:任意字符串;string:查询的子字符串
1.5 字符串操作
截取字符串 substring()
substring()方法返回一个新字符串,他是此字符串的一个子字符串。该字符串从指定的beginIndex处的字符开始,直到索引endIndex-1处的字符。
str.substring(beginIndex);
str.substring(beginIndex, endIndex); //str:任意字符串;beginIndex:起始索引(包括);endIndex:结束索引(不包括)
字符串替换 replace()
replace()方法可以实现将指定的字符序列替换成新的字符序列。
str.replace(oldstr, newstr); //str:任意字符串;oldstr:要被替换的字符串;newstr:替换后的字符串
Note:
- replace()方法返回的是一个新的字符串。如果字符串str中没有找到需要替换的字符串序列oldstr,则将原字符串返回。
- 如果出现多次,则全部替换。
- 大小写要一致才能替换,如果不一致不能替换。
字符串分割 split()
split()方法可根据给定的分隔符对字符串进行拆分,支持正则表达式,最后返回一个字符串数组。
str,split(regex); //str:任意字符串;regex:分隔符表达式。
大小写转换 toLowerCase()/toUpperCase()
str.toLowerCase(); //转换为小写
str.toUpperCase(); //转换为大写
Note:转化成功后,返回一个新的字符串。
去除空白内容 trim()
trim()方法可以将字符串首尾处的空白内容删除。
str.trim(); //str:任意字符串
比较字符串是否相等 equals()
当且仅当进行比较的字符串不为null,并且与被比较的字符串内容相同时,结果为true.
a.equals(str); //a:任意字符串;str:进行比较的字符串。
Note:
- 字符串比较中“==”和“equals()”不同,前者不仅需要内容相同还需要地址相同,后者只需要存储内容相同。
- String str = null;和String str = “ ”是两种不同的概念。前者是空指针,不指向任何位置;后者表示是一个“ ”字符串,分配了内存空间的。
2、StringBuffer类
String创建的字符串是不可变的;StringBuffer类创建的字符串序列是可修改的,且实体容量会随着存放的字符串增加而自动增加。
StringBuffer类是线程安全的可变字符序列,一个类似于String类的字符串缓冲区,StringBuffer的执行效率比String高。
2.1 创建对象
StringBuffer sbf= new StringBuffer(); //创建一个对象没有初始值
StringBuffer sbf = new StringBuffer("abc"); //创建一个对象,初始值为abc
StringBuffer sbf = new StringBuffer(32); //创建一个对象,初始容量为32个字符
2.2 追加字符序列 append()
append()方法可将参数转化为字符串,然后追加到此序列中。
sbf.append(obj); //sbf:任意StringBuffer对象;obj:任意数据类型的对象,String/int/double/Boolean。
2.3 修改指定索引处的字符 setCharAt()
sbf.setCharAt(index, ch); // sbf:任意StringBuffer对象;index:被替换字符的索引;ch:替换后的字符。
2.4 插入字符串 insert()
插入后,后面的内容往后面延。不会覆盖数据
sbf.insert(offset, str); // sbf:任意StringBuffer对象;offset:插入的索引;str:插入的字符串。
2.5 字符串反序 reverse()
StringBuffer sbf=new StringBuffer("同一个世界,同一个梦想");
sbf=sbf.reverse(); //想梦个一同,界世个一同
2.5 删除字符串 delete()
delete()方法可以移除此序列的子字符串中的字符。该字符串是从指定的索引start处开始,一直到end-1处,如果end-1超出索引范围,则一直到序列尾部。如果start=end,则不会生变化。
sbf.delete(start,end);sbf:任意StringBuffer对象;start:启始索引;end:结束索引(不包含)
- 其他方法