我们可以查询API文档中对String类的解释:String类表示的字符串。java程序中的所有字符串,如 “abc”,实现这个类的实例。
所有字符串实现这个类的实例又是什么意思呢?就是说,你敲出一个字符串,默认这个字符串就是String的一个对象。
比如下面这段代码
package org.jimmy.demo2;
/**
* @Author: Administrator
* @CreateTime: 2018-12-25 20:22
*/
public class StringDemo {
public static void main(String[] args) {
System.out.println("abc".length());
}
}
3
这个程序返回该字符串的长度,public int length()方法:返回字符串的长度
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):把字符串常量值转成字符串
String类的特点:
一旦对象被创建,就不能更改,我们在用一个引用表示该字符串,重新赋值其实是让这个引用代表另一个字符串,只是指向常量池中不同的地址值,我们可以用内存图来解释
如图所示,s只是改变了地址值的指向,但hello这个字符串仍然存在于常量池,在创建一个字符串后,会先在常量池寻找有没有这个字符串,如果没有就创建一个,在以后有哪个对象要使用这个字符串时,就直接指向这个字符串的地址。
String类的判断功能
public boolean equals(Object obj):
String重写了equals()方法,我们知道在Object类中equals()是用来判断对象的地址值是否相同,但在String类中,他被重写为判断字符串的内容是否相同,我们可以看看equals()在String类中的代码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
public boolean equalsIgnoreCase(String str):
这个方法也是判断字符串内容,不过不区分大小写,也就是说A和a在这个方法中比较是相同的。
public boolean contains(String str): 判断字符串中是否包含传递进来的字符串
public boolean startsWith(String str): 判断字符串是否以传递进来的字符串开头
public boolean endsWith(String str): 判断字符串是否以传递进来的字符串结尾
public boolean isEmpty(): 判断字符串的内容是否为空串""
package org.jimmy.demo2;
/**
* @Author: Administrator
* @CreateTime: 2018-12-25 20:22
*/
public class StringDemo {
public static void main(String[] args) {
String s="java";
String s1="world";
System.out.println(s.equals(s1));
System.out.println(s.contains("ja"));
System.out.println(s.startsWith("j"));
System.out.println(s.endsWith("a"));
System.out.println(s.isEmpty());
}
}
false
true
true
true
false
如代码所示
String类的获取功能
public int length(): 获取字符串的长度。
public char charAt(int index): 获取指定索引位置的字符
public int indexOf(int ch): 返回指定字符在此字符串中第一次出现处的索引。
public int indexOf(String str): 返回指定字符串在此字符串中第一次出现处的索引。
public int indexOf(int ch,int fromIndex): 返回指定字符在此字符串中从指定位置后第一次出现处的索引。
public int indexOf(String str,int fromIndex): 返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
public String substring(int start): 从指定位置开始截取字符串,默认到末尾。
public String substring(int start,int end): 从指定位置开始到指定位置结束截取字符串。
package org.jimmy.demo2;
/**
* @Author: Administrator
* @CreateTime: 2018-12-25 21:11
*/
public class StringDemo2 {
public static void main(String[] args) {
String s="assfaaadfsdfaaadgaaaetaaa";
System.out.println(s.length());
System.out.println(s.charAt(4));
System.out.println(s.indexOf("f"));
System.out.println(s.indexOf("aaa"));
System.out.println(s.substring(6));
System.out.println(s.substring(4,7));//含头不含尾
}
}
a
3
4
adfsdfaaadgaaaetaaa
aaa
如代码所示
String类的转换功能
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): 把字符串拼接。
这里挑几个方法用代码实现:
package org.jimmy.demo2;
/**
* @Author: Administrator
* @CreateTime: 2018-12-25 21:26
*/
public class StringDemo3 {
public static void main(String[] args) {
String s="werwrfSasASD";
String s2="asaffwa";
System.out.println(s.toLowerCase());
System.out.println(s.toUpperCase());
System.out.println(s.concat(s2));
}
}
werwrfsasasd
WERWRFSASASD
werwrfSasASDasaffwa
结合获取功能和转换功能,将一个字符串的首位转成大写,其余位都为小写
package org.jimmy.demo2;
/**
* @Author: Administrator
* @CreateTime: 2018-12-25 21:32
*/
public class StringDemo4 {
public static void main(String[] args) {
String s="asdfafASDEFsdADDSFa";
String s1 = s.substring(0, 1).toUpperCase();
String s2 = s.substring(1).toLowerCase();
String s3 = s1.concat(s2);
System.out.println(s3);
}
}
Asdfafasdefsdaddsfa
String类的其他功能
A:String的替换功能
public String replace(char old,char new) 将指定字符进行互换
public String replace(String old,String new) 将指定字符串进行互换
B:String的去除字符串两空格
public String trim() 去除两端空格
C:String的按字典顺序比较两个字符串
public int compareTo(String str) 会对照ASCII 码表 从第一个字母进行减法运算 返回的就是这个减法的结果,如果前面几个字母一样会根据两个字符串的长度进行减法运算返回的就是这个减法的结果,如果两个字符串一模一样 返回的就是0
trim()方法是去除两端空格,那么去除中间的空格呢?
package org.jimmy.demo2;
/**
* @Author: Administrator
* @CreateTime: 2018-12-25 21:39
*/
public class StringDemo5 {
public static void main(String[] args) {
String s="asfaf asfs sdf adfa";
String s1="";
for (int i = 0; i < s.length(); i++) {
char ch=s.charAt(i);
if(ch==' '){
continue;
}else{
s1+=ch;
}
}
System.out.println(s1);
}
}
asfafasfssdfadfa