String类概述
String 类代表字符串,Java 程序中的所有字符串文字(例如“aaa”)都被实现为此类的实例。也就是说,Java 程序 中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,使用的时候不需要导包!
String类的特点
- 字符串不可变,它们的值在创建后不能被更改
- 虽然 String 的值是不可变的,但是它们可以被共享
- 字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
String类的常用构造方法
-
String s = “aaa”; 这个不是构造方法,直接赋值的方式创建字符串对象,内容就是abc
-
public String() 创建一个空白字符串对象,不含有任何内容
-
public String(char[] chs) 根据字符数组的内容,来创建字符串对象
-
public String(byte[] bys) 根据字节数组的内容,来创建字符串对象
还有一些重载的构造方法,就不一一写出来了
接下来我们挨个演示一下
public class StringConstructor {
public static void main(String[] args) {
//String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc
String str1 = "abc"; System.out.println("str1:" + str1);
//public String(); 创建一个空白字符串对象,不含有任何内容
String str2 = new String();
System.out.println("str2:" + str2); //这里输出是空的
//public String(char[] chs); 根据字符数组的内容,来创建字符串对象
char[] chs = {'h', 'e', 'l', 'l', 'o'};
String str3 = new String(chs);
System.out.println("str3:" + str3);
//public String(byte[] bys); 根据字节数组的内容,来创建字符串对象
byte[] bys = {97, 98, 99};
String str4 = new String(bys);
System.out.println("str4:" + str4);
}
}
通过new创建出来的字符字符串和直接赋值创建的字符串是有区别的:
通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
直接赋值方式创建
以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一 个 String 对象,并在字符串池中维护
字符串的常用方法
- public char charAt(int index); 返回指定索引处的char值
- public String concat(String str); 将指定字符串连接到该字符串的末尾
- public int indexOf(String str); 返回指定字符串出现在该字符串第一次出现的索引
- public int length(); 返回该字符串的长度
- public boolean isEmpty(); 判断是否为空,为true相当于length() 等于0
- public String replace(CharSequence target, CharSequence replacement); 替换指定的字符串
- public String[] split(String regex); 按照指定字符串切割,返回切割后的字符串数组
- public String subString(int beginIndex); 按照索引截取字符串,包前不包后
- public String subString(int beginIndex,int endIndex); 按照开始索引截取字符串结束索引位置,包前不包后
- public char[] toCharArray(); 将字符串转换为char数组
- public String toLowerCase(); 将字符串转换为小写
- public String toUpperCase(); 将字符串转换为大写
- public String trim(); 去除该字符串的前后空格
- public static String valueOf(int i); 将指定类型转换为String
- public boolean equals(Object anObject); 比较字符串的内容,严格区分大小写
- public boolean equalsIgnoreCase(Object anObject); 比较字符串的内容,不区分大小写
以上对字符串进行操作的方法都不会影响原来的字符串,只会返回一个新的字符串
接下来我们挨个演示下:
public class StringMethodDemo {
public static void main(String[] args) {
String str = "HelloWorld";
//charAt 返回指定索引处的char值
char c = str.charAt(1); //返回1索引处的char值
System.out.println(c); //输出 e 刚好对应str1字符串的1索引位置
//concat 将指定字符串连接到该字符串的末尾
String concat = str.concat(",haha"); //将指定字符串 “,haha” 连接到该字符串的末尾
System.out.println(concat); //输出 HelloWorld,haha
//indexOf 返回指定字符串出现在该字符串第一次出现的索引
int i = str.indexOf("W"); //查找字符串“W”出现在该字符串第一次出现的索引
System.out.println(i); //输出 5
int i2 = str.indexOf("Hello"); //查找字符串“Hello”出现在该字符串第一次出现的索引
System.out.println(i2); //输出 0 “Hello”在str字符串中出现的第一次位置就是0索引
//length 返回该字符串的长度
System.out.println(str.length()); //输出 10 获取str字符串的长度
//isEmpty 判断是否为空,为true相当于length() 等于0
boolean empty = str.isEmpty(); //判断str字符串是否为空
System.out.println(empty); //输出 false 不是空的
String xx = new String();
System.out.println(xx.isEmpty()); //输出 true 这是一个空字符串
//replace 替换指定的字符串
String s = "aBc";
String replace = s.replace("B", "b"); //用指定的字符串“b”替换该字符串里面的“B”
System.out.println(replace); //输出结果 abc
//split 按照指定字符串切割,返回切割后的字符串数组
String s2 = "AA,BB,CC";
String[] split = s2.split(","); //按照“,”切割字符串
//遍历切割后的字符串数组
for(String st:split){
System.out.println(st);
}
//subString(一个参数) 从索引位置截取字符串后面所有的内容,包前
String substring = str.substring(5);
System.out.println(substring); //输出 World
//subString(两个参数) 按照开始索引截取字符串结束索引位置,包前不包后
String substring2 = str.substring(0,5); //从索引0开始截取,截取到第5索引,但是不包括5索引位置的元素
System.out.println(substring2); //输出 Hello
//toCharArray 将字符串转换为char数组
char[] chars = str.toCharArray();//将str转换为char型数组
//遍历转换后的char型数组
for(char c2 : chars){
System.out.println(c2);
}
//toLowerCase 将字符串转换为小写
String s3 = "ABC";
String lowerCase = s3.toLowerCase();
System.out.println(lowerCase); //输出结果 abc
//toUpperCase 将字符串转换为大写
String s4 = "abc";
String upperCase = s3.toUpperCase();
System.out.println(upperCase); //输出结果 ABC
//trim 去除该字符串的前后空格
String s5 = " 哈哈 ";
System.out.println("没有去除前后空格前:" + s5); //输出:没有去除前后空格前: 哈哈
String trim = s5.trim();
System.out.println("没有去除前后空格前:" + trim); //输出:没有去除前后空格前:哈哈
//valueOf 这是静态方法 将指定类型转换为String
String v1 = String.valueOf(10); //将int转为字符串
System.out.println(v1);
System.out.println(v1 instanceof String); //判断是否是String类型 true
String v2 = String.valueOf(10.01); //将double转为字符串
System.out.println(v2);
System.out.println(v1 instanceof String); //判断是否是String类型 true
//...
//equals 比较字符串的内容,严格区分大小写
String e1 = "AAA";
String e2 = "aaa";
String e3 = "AAA";
System.out.println(e1 == e2); //false 双等号比较的是地址值
System.out.println(e1.equals(e2)); //false
System.out.println(e1.equals(e3)); //true
//equalsIgnoreCase 比较字符串的内容,不区分大小写
System.out.println(e1.equalsIgnoreCase(e2)); //true
System.out.println(e1.equalsIgnoreCase(e3)); //true
}
}
以上就是字符串的一些常用的方法了,还有很多字符串的方法没有写出来,这个需要自己去看API文档了哦。