Java(4)String类
Java String类
String
类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了
如果需要对字符串做很多修改,那么应该选择使用 StringBuffer & StringBuilder 类。
String字符串的操作
创建字符串
-
通过双引号
“”
创建。String greeting = "菜鸟教程"; //String是一个引用类型,本质是一个类class,但是因为String太常用了,Java提供了这种方法。
-
通过
new
关键字创建String s=new String("abc");
-
通过构造方法创建
char[] helloArray = { 'r', 'u', 'n', 'o', 'o', 'b'}; String helloString = new String(helloArray);
字符串长度
String 类的一个访问器方法 是 length() 方法,它返回字符串对象包含的字符数。
用于获取有关对象的信息的方法称为访问器方法。
String s= new String()
s.length()
连接字符串
- 使用
String类
的concat方法或者+号:
System.out.println("hello".concat(" world"));
System.out.println("hello"+" world");
//结果都是hello world
- 使用
String类
的join()
方法,通过某种连接符连接字符串。
public class Test01{
public static void main(String[] args) {
String[] a={"I", "love you","krystal"}; //创建字符串类型的数组
String krystal=String.join("***",a);
System.out.println(krystal);
}
}
//运行结果为:I***love you***krystal
分割字符串
String类提供了split()
方法:依据某个分割符分割字符串。split()
方法的参数是正则表达式。
public class Test01{
public static void main(String[] args) {
String a="kobe*this*is*for*you";
String [] b=a.split("\\*"); //这里要注意,第一个\是转义字符,\*是正则表达式
for(String i:b){ //循环遍历b
System.out.println(i);
}
}
}
/*运行结果为:
kobe
this
is
for
you
*/
替换字符串子串
使用String类提供的replace()方法,方法参数可以是正则表达式。
public class Test01{
public static void main(String[] args) {
String a="I hate you!";
System.out.println(a.replace("hate","love"));//参数可以为正则表达式
}
}
//运行结果为:I love you!
格式化字符串
使用printf()或者format()方法
float floatVar=1.0f;
int intVar=3;
String stringVar="Hello";
String fs;
//printf()方法:
System.out.printf("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
"is %s", floatVar, intVar, stringVar);
//format()方法:
/*注意:format()并不能打印字符串出来,需要另外输出语句,因为format() 返回一个String 对象而不是 PrintStream 对象*/
fs = String.format("浮点型变量的值为 " +
"%f, 整型变量的值为 " +
" %d, 字符串变量的值为 " +
" %s", floatVar, intVar, stringVar);
System.out.print(fs);
去除字符串首尾空白字符
- 使用
String
类的trim()
方法可以移除字符串首尾的英文空白字符,空白字符包括:\n,\r,\t
。
public class Test01{
public static void main(String[] args) {
String a=" I love you, Krystal! ";
System.out.println(a);
System.out.println(a.trim()); //注意:trim()并没有改变字符串a,而是返回了新字符串
}
}
/*运行结果如下,可以看到第二行输出被去除了空白字符
I love you, Krystal!
I love you, Krystal!
*/
String
类提供了isEmpty()
方法来判断字符串是否为空(有空白字符就算字符串不为空)
public class Test01{
public static void main(String[] args) {
String a=" Kobe I love you ";
System.out.println(a.isEmpty()); //false
System.out.println(" ".isEmpty()); //false
System.out.println("".isEmpty()); //true
}
}
String类支持的其它方法
Java StringBuffer 和 StringBuilder 类
和 String 类(不可变数据类型)不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。(即为可变数据类型)
例如:Java对String
进行了特殊处理,可使用+
连接字符串,但是利用+
连接字符串的同时,会不断产生新的String
类型对象。
public class Test01{
public static void main(String[] args) {
String a="";
for (int i = 0; i < 3; i++) {
}
}
}
为了高效拼接字符串,Java提供了StringBuilder和StringBuffer类,它们是可变类型,可以预分配缓冲区,这两种类型字符串新增字符时,不会创建新的临时对象。
这两种类型字符串不支持+号,但支持链式操作,如下:
public class Test01{
public static void main(String[] args) {
StringBuilder a=new StringBuilder();
a=a.append("I").append(" love you").insert(0,"Kobe, ");
System.out.println(a);
StringBuffer b=new StringBuffer();
b=b.append("I").append(" love you").insert(0,"Krystal, ");
System.out.println(b);
}
}
/*运行结果为:
Kobe, I love you
Krystal, I love you
*/
从上面可以知道,要高效拼接字符串,应该使用StringBuilder
,如:
package day01;
/**
* 利用字符串数组{"Kobe","James","kevin","love","Jordan"},
* 拼接成 Hello,Kobe, James, kevin, love, Jordan!
*/
public class Test01{
public static void main(String[] args) {
StringBuilder s=new StringBuilder();
String [] arrStr={"Kobe","James","kevin","love","Jordan"};
s.append("Hello,");
for (String i:arrStr){ //循环拼接
s.append(i).append(", ");
}
s.delete(s.length()-2,s.length()-1); //去掉尾部的逗号和空格 ", "
s.append("!");
System.out.println(s);
}
}
//运行结果为:Hello,Kobe, James, kevin, love, Jordan!
//------------Java还提供了StringJoiner类,该类可以指定拼接符和首尾符号来拼接字符串----------
package day01;
import java.util.StringJoiner;
public class Test01{
public static void main(String[] args) {
StringJoiner s=new StringJoiner(",","Hello,","!");
//第一个参数是拼接符,第二个参数是字符串开头添加的内容,第三个参数是字符串结尾添加的内容
System.out.println(s);
String [] arrStr={"Kobe","James","kevin","love","Jordan"};
for(String i:arrStr){
s.add(i);
}
System.out.println(s);
}
}
/*运行结果为:
Hello,!
HelloKobe,James,kevin,love,Jordan
*/
StringBuilder和StringBuffer的区别:**
StringBuilder
:有速度优势
StringBuffer
类:线程安全