字符串即字符的组合,在Java中,字符串是一个类,所以我们见到的字符串都是对象。
常见创建字符串手段:
每当有一个字面值出现的时候,JVM虚拟机就会创建一个字符串
调用String的构造方法创建一个字符串对象
通过+加号进行字符串拼接也会创建新的字符串对象
String 被修饰为final,所以是不能被继承的。
如果不使用字符串格式化,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐。
使用字符串格式化,就可以简洁明了。
%s表示字符串,%d表示数字,%n表示换行。
字符串的常用API
length方法返回当前字符串的长度。
split
根据分隔符进行分隔
subString
截取子字符串
trim
去掉首尾空格
toLowerCase 全部变成小写
toUpperCase 全部变成大写
indexOf 判断字符或者子字符串出现的位置
contains 是否包含子字符串
replaceAll 替换所有的
replaceFirst 只替换第一个
字符串比较
一般说来,编译器每碰到一个字符串的字面值,就会创建一个新的对象。
如果都是字面值,那么内容相同,就是一样的字符串,字符串只要出现了一次,就会被放到字符串常量池中,下次如果使用了相同的字符串,就会直接拿来用。
使用equals进行字符串内容的比较,必须大小写一致
equalsIgnoreCase,忽略大小写判断内容是否一致
可变的字符串
StringBuffer和StringBuilder。
StringBuffer是线程安全的(synchronized),而 StringBuilder不是,所以StringBuilder效率更高,锁的获取和释放会带来开销。
课程代码:
package com.qingguoxy.test;
import com.qingguoxy.entity.Luban;
public class Test09 {
public static void main(String[] args) {
Luban luban = new Luban();
String name = luban.getName();
String object = new String("蓝Buff");
String action = "%s在偷敌方的%s!%d%n";
System.out.printf(action,name,object,666);
int len = name.length(); //获取字符串的长度
System.out.println(len);
String str = name + "||兰陵王||之间的仇恨!";
String[] strSplit = str.split("\\|\\|");
for(int i = 0;i < strSplit.length;i ++){
System.out.println(strSplit[i].trim());
}
str = str.replaceFirst("\\|\\|","");
System.out.println(str);
if(str.indexOf("鲁班1") != -1){
System.out.println("鲁班存在");
}
System.out.println("====================");
String name1 = "鲁班";
String name2 = new String("鲁班") ;
System.out.println(name1.equals(name2) );
StringBuffer sb = new StringBuffer(luban.getName());
sb.append("正在猥琐发育!~");
sb = new StringBuffer(sb.substring(0,2));
System.out.println(sb);
}
}