目录
键盘录入字符串(Scanner)
next():结束标记:空格、tab键
nextLine():结束标记:回车换行符
如果整数和字符串一起接收,建议使用nextInt()+next()
字符串(String)
String方法小结
方法名 | 说明 |
---|---|
public boolean equals() | 比较字符串的内容,严区分大小写 |
public boolean equalsIgnoreCase() | 比较字符串的内容,忽略大小写 |
public int length() | 返回字符串长度 |
public char charAt(int index) | 返回指定索引处的char值 |
public char[] toCharArray() | 将字符串拆分为字符数组后返回 |
public String substring(int beginIndex,int endIndex) | 根据开始和结束索引进行截取,得到新字符串 |
public String substring(int beginIndex) | 从传入的索引处进行截取,直到末尾,得到新的字符串 |
public String replace(CharSequence target,CharSequence replacement) | 使用新值,将字符串中的旧值替换,得到新的字符串 |
public String[] split(String regex) | 根据传入的规则切割字符串,得到字符串数组 |
字符串常量池
注意:字符串常量池在JDK7版本开始从方法区挪到了堆内存
当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在。
不存在:创建
存在:不会重新创建,直接复用
字符串的比较
使用==做比较
-
基本类型:比较的是数据值是否相同
-
引用类型:比较的是地址值是否相同
使用equals()比较
equals比较的是内容
s1.equals(s2)
String常见面试题
public class ApiString {
public static void main(String[] args){
test1(); //true
test2(); //false
test3(); //false
test4(); //true
}
//因为字符串常量池,所以s1,s2的地址相同
public static void test1(){
String s1 = "abc";
String s2 = "abc";
System.out.println(s1==s2); //true
}
//s2是一个新的对象地址,所以s1,s2的地址不同
public static void test2(){
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1==s2); //false
}
//当字符串之间使用+号拼接的时候,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接,拼接后,再调用其toString方法转换成String类型
public static void test3(){
String s1 = "abc";
String s2 = "ab";
String s3 = s2+"c";
System.out.println(s1==s3); //false
}
//java存在常量优化机制,在编译的时候,就会将"a"+"b"+"c"拼接成“abc”
public static void test4(){
String s1 = "abc";
String s2 = "a"+"b"+"c";
System.out.println(s1==s2); //true
}
}
StringBuilder
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器
作用:提高字符串的操作效率
常用成员方法
public StringBuilder append(任意类型):添加数据,并返回对象本身
public StringBuilder reverse():返回相反的字符序列
public int length():返回长度
public String toString():把StringBuilder类型转换为String类型