String类概述
本编博客记录了String类的常用方法,一方面可以加强自己对String类中方法的记忆,另一方面可以整理成笔记的形式,方便以后查找。
String类表示字符串,Java所有的字符串文字都实现为此类的实例。
注意的点:字符串是不变的; 它们的值在创建后无法更改。 因为String对象是不可变的,所以可以共享它们。String类的修饰符为final,所以可以进行共享。可以用以下代码来验证。
public class Demo {
public static void main(String[] args){
String s1 = "123";
String s2 = "123";
String s3 = new String("123");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
}
}
------------运行结果------------
true
false
这个程序的第一个运行结果为true,说明s1与s2的内存地址相同,JVM只开辟了一份内存空间去存储"123"。而s3是new出来的一个内存去存储"123",所以他的内存地址发生了改变,所以第二个比较的结果为false。
String类的构造方法
String类的常用构造方法上面的代码已经涉及到了,分别是
String s1 = "123";
String s3 = new String("123");
还有一种构造方法是String(String original)
初始化新创建的String对象,使其表示与参数相同的字符序列; 换句话说,新创建的字符串是参数字符串的副本。代码为:
String s3 = new String(s1);
其他的构造方法可以参考API,不太常用。
String类的常用方法
1) length():获取字符串的长度
String s1 = "123abc456";
System.out.println(s1.length());
------------运行结果------------
9
2)substring(int beginIndex):从beginIndex开始截取字符串
String s1 = "123abc456";
System.out.println(s1.substring(3));
------------运行结果------------
abc456
3)substring(int beginIndex, int endIndex):截取字符串范围是[ a , b )
注意包含a,不包含b
String s1 = "123abc456";
System.out.println(s1.substring(3,6));
------------运行结果------------
abc
4)charAt(int index):获取指定索引处的字符
String s1 = "123abc456";
System.out.println(s1.charAt(3));
------------运行结果------------
a
5)indexOf(String str):返回指定子字符串第一次出现的字符串中的索引
String s1 = "123abc456";
System.out.println(s1.indexOf("bc"));
------------运行结果------------
4
6)indexOf(String str,int fromIndex):从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。
String s1 = "456123abc456";
System.out.println(s1.indexOf("45",3));
------------运行结果------------
9
7)replace(char oldChar, char newChar):返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar 。
String s1 = "123abc456";
System.out.println(s1.replace("456","789"));
------------运行结果------------
123abc789
8)equals(Object anObject):将此字符串与指定的对象进行比较
String s1 = "123";
String s2 = "1234";
System.out.println(s1.equals(s2));
------------运行结果------------
false
9)equalsIgnoreCase(String anotherString):将此 String与另一个 String比较,忽略了大小写
String s1 = "aBc";
String s2 = "Abc";
System.out.println(s1.equalsIgnoreCase(s2));
------------运行结果------------
true
10)toCharArray():将此字符串转换为新的字符数组
String s1 = "abc123";
char arr[] = s1.toCharArray();
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
------------运行结果------------
a,b,c,1,2,3,
12)toLowerCase():使用默认语言环境的规则将此 String所有字符转换为小写。
与之相对应的还有 toUpperCase():转化为大写字母
String s1 = "ABCDEF";
System.out.println(s1.toLowerCase());
------------运行结果------------
abcdef
13)trim():返回一个字符串,其值为此字符串,删除了所有前导和尾随空格
String s1 = " abcd 12 34 ";
System.out.println(s1.trim());
System.out.println(s1);
------------运行结果------------
abcd 12 34
abcd 12 34
14)contains(CharSequence s ):当且仅当此字符串包含指定的char值序列时,才返回true
CharSequence是一个接口,实现了这个接口的类有: CharBuffer、String、StringBuffer、StringBuilder这个四个类。
String s1 = "abcd123456";
String s2 = "d123";
String s3 = "xyz";
System.out.println(s1.contains(s2));
System.out.println(s1.contains(s3));
------------运行结果------------
true
false
15)concat(String str):将指定的字符串连接到此字符串的末尾
String s1 = "abcd123456";
String s2 = "xyz";
System.out.println(s1.concat(s2));
------------运行结果------------
abcd123456xyz