String(字符串)类
字符串是由多个字符组成的,而且它还是个常量,一旦被创建,值就不能被改变,它和字符的区别在于,字符是单引号(如:'a'),而字符串是双引号(如:"asdf",它本身也是个对象,可以直接调用方法)。String(字符串)类的常用方法
构造方法
构造方法 | 说明 |
---|---|
public String() | 空构造 |
public String(byte[] bytes) | 把字节数组转成字符串 |
public String(byte[] bytes,int index,int length) | 把字节数组的一部分转成字符串(index:表示的是从第几个索引开始, length表示的是长度) |
public String(char[] value) | 把字符数组转成字符串 |
public String(char[] value,int index,int count) | 把字符数组的一部分转成字符串 |
public String(String original) | 把字符串常量值转成字符串 |
代码演示
public class Sstring {
public static void main(String[] args) {
//定义字符数组
char[] c={'爱','生','活',',','爱','j','a','v','a'};
//初始化,调用构造函数public String(char[] value);
String s = new String(c);
//初始化,调用构造函数public String(char[] value,int index,int count);
String s1 = new String(c,0,3);
System.out.println(s);
System.out.println(s1);
}
}
结果
爱生活,爱java
爱生活
判断功能
判断方法 | 说明 |
---|---|
public boolean equals(Object obj) | 比较字符串的内容是否相同,区分大小写 |
public boolean equalsIgnoreCase(String str) | 比较字符串的内容是否相同,忽略大小写 |
public boolean contains(String str) | 是否包含某字符串,有就true,反之false |
public boolean startsWith(String str) | 是否以该字符串开头,是就true,反之false |
public boolean endsWith(String str) | 是否以该字符串结尾,是就true,反之false |
public boolean isEmpty() | 内容是否为空串,是就true,反之false |
代码演示
public class Sstring {
public static void main(String[] args) {
//字符串本身就是对象,直接就可以调用方法
//判断是否以包含该字符串
boolean b = "爱生活,爱java".contains("爱");
System.out.println(b);
//判断是否以该字符串开头
boolean c = "爱生活,爱java".startsWith("爱");
System.out.println(c);
//判断是否以该字符串结尾
boolean e = "爱生活,爱java".endsWith("爱");
System.out.println(e);
//判断是否为空串""
boolean empty = "爱生活,爱java".isEmpty();
System.out.println(empty);
String a="abc";
String aa="ABC";
//比较两个对象内容是否相同,不忽略大小写
System.out.println(a.equals(aa));
//忽略大小写
System.out.println(a.equalsIgnoreCase(aa));
}
}
结果
true
true
false
false
false
true
获取功能
获取功能 | 说明 |
---|---|
public int length() | 获取字符串长度 |
public char charAt(int index) | 获取指定位置的字符串 |
public int indexOf(String str) | 返回指定字符串在此字符串中第一次出现处的索引 |
public int indexOf(String str,int fromIndex) | 返回指定字符串在此字符串中从指定位置后第一次出现处的索引 |
public String substring(int start) | 从指定位置开始截取字符串,默认到末尾 |
public String substring(int start,int end) | 从指定位置开始到指定位置结束截取字符串,含头不含尾 |
代码演示
public class Sstring {
public static void main(String[] args) {
//从该位置到末尾截取字符串
System.out.println("爱生活,爱java".substring(0));
//从第一个位置开始到第二个位置结束截取字符串,含头不含尾,因此截取的结果为生活
System.out.println("爱生活,爱java".substring(1,3));
//指定截取的位置,并返回字符
System.out.println("爱生活,爱java".charAt(1));
//返回字符串长度
System.out.println("爱生活,爱java".length());
//返回字符串第一次出现的位置
System.out.println("爱生活,爱java".indexOf("爱"));
//返回从指定位置开始搜索,该字符串第一次出现的位置
System.out.println("爱生活,爱java".indexOf("爱",2));
}
}
结果
爱生活,爱java
生活
生
9
0
4
转换功能
转换功能 | 说明 |
---|---|
public byte[] getBytes() | 把字符串转换为字节数组 |
public char[] toCharArray() | 把字符串转换为字符数组 |
public static String valueOf(char[] chs) | 把字符数组转成字符串 |
public static String valueOf(int i) | 把int类型的数据转成字符串 注意:String类的valueOf方法可以把任意类型的数据转成字符串 |
public String toLowerCase() | 把字符串转成小写 |
public String toUpperCase() | 把字符串转成小写 |
public String concat(String str) | 把字符串拼接起来 |
其他功能
其他功能 | 说明 |
---|---|
public String replace(char old,char new) | 将指定字符进行互换 |
public String replace(String old,String new) | 将指定字符串进行互换 |
public String trim() | 去除两端空格 |
public int compareTo(String str) | 会对照ASCII 码表,从第一个字母进行减法运算,返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果如果连个字符串一摸一样,返回的就是0 |
public int compareToIgnoreCase(String str) | 跟上面的compareTo方法一样,只不过忽略大小写 |
代码演示
把数组中的数据按照指定个格式拼接成一个字符串如: int[] arr = {1,2,3}; 输出: [1, 2, 3]
public class Sstring {
public static void main(String[] args) {
int[] arr = {1,2,3};
String c = "]";//定义一个字符串存放"["
String d="[";//定义一个字符串存放"]"
//遍历数组,把数组中的数字转换为字符串
for (int i = 0; i <arr.length ; i++){
//把转换的字符串与前括号拼接在一起,用concat方法把字符串拼接起来
d=d.concat(String.valueOf(arr[i]));
if(i==arr.length-1){
//把后括号和前面的字符串拼接起来
d=d.concat(c);
//跳出循环,这样最后的逗号就可以不用多打出来,否则括号外会多一个逗号
break;
}
d=d.concat(",");//拼接逗号
}
System.out.println(d);
}
}
结果
[1, 2, 3]
面试题
1、String s = new String(“hello”)和String s = “hello”;的区别 String类型的变量本身就是一个引用类型,字符串的值是在方法区的常量池中存储的,通过上图可以了解到,jvm虚拟机把java文件编译为字节码(class)文件后,加载进栈main方法;第一个s是new出来的对象,因此会在堆中开辟一个空间,这个空间里存储的就是这个hello的地址,然后s就会指向这个空间从而间接的从这个空间中的地址指向hello,从而取到hello值;第二个s是直接将hello的地址赋给它,从而指向hello,取到hello值。
2、s的结果是多少?
String s = "hello" ;
s = "world" + "java";
结果是worldjava,因为String类型一经赋值就不会再改变了,改变的是它的引用,一开始给s赋予的是hello的地址,因此它开始时指向的是hello的地址,又因为world和java这两个字符串在常量池中还没有它们,因此在常量池中相继创建它们,我们最后取得是这两个值连接在一起,因此又会在常量池中创建这个值,然后赋予s它的地址。