String
开篇:
java.lang.String
类:即字符串
Java程序中所有的字符串文字(例如
"abc"
)都可以被看作是实现此类的实例。
特点:
-
字符串不变:字符串的值在创建后不能被更改。
-
因为String对象是不可变的,所以它们可以被共享。
-
"abc"
等效于char[] data={ 'a' , 'b' , 'c' }
,但是底层原理是字节数组( byte[] )
注意1: 创建字符串对象两种方式的区别:
-
通过构造方法创建
通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
-
直接赋值方式创建
以“ ”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护
注意2: 字符串的比较:==号和equals的作用:
- ==比较基本数据类型:比较的是具体的值
- ==比较引用数据类型:比较的是对象地址值
- equals比较String类型: 比较的是对象的内容是否相同
构造方法:
-
public String()
:初始化新创建的 String对象,以使其表示空字符序列。 -
public String(char[] value)
:通过当前参数中的字符数组来构造新的String。 -
public String(byte[] bytes)
:通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。
常用方法:
①判断方法
1.public boolean equals (Object anObject)
:将此字符串与指定对象进行比较内容是否相同,区分大小写。
2.public boolean equalsIgnoreCase (String anotherString)
:将此字符串与指定对象进行比较,忽略大小写。
示例:
public class DemoOne {
public static void main(String[] args) {
// 创建字符串对象
String s1 = "hello";
String s2 = "hello";
String s3 = "HELLO";
// boolean equals(Object obj):比较字符串的内容是否相同
System.out.println(s1.equals(s2)); // true
System.out.println(s1.equals(s3)); // false
System.out.println("-----------");
//boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
System.out.println(s1.equalsIgnoreCase(s2)); // true
System.out.println(s1.equalsIgnoreCase(s3)); // true
}
}
②获取方法
-
public int length ()
:返回此字符串的长度。 -
public String concat (String str)
:将指定的字符串连接到该字符串的末尾。 -
public char charAt (int index)
:返回指定索引处的 char值。 -
public int indexOf (String str)
:返回指定子字符串第一次出现在该字符串内的索引。 -
public String substring (int beginIndex)
:返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。 -
public String substring (int beginIndex, int endIndex)
:返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。
示例:
public class DemoTwo {
public static void main(String[] args) {
//创建字符串对象
String s = "helloworld";
//获取字符串的长度,其实也就是字符个数
System.out.println(s.length());
System.out.println("--------");
//将指定的字符串连接到该字符串的末尾.
String ss = s.concat("--hello laoazhang");
// 会输出helloworld--hello laoazhang
System.out.println(ss);
//获取指定索引处的字符
System.out.println(s.charAt(2));
System.out.println("--------");
//获取str在字符串对象中第一次出现的索引,没有返回-1
System.out.println(s.indexOf("l"));
System.out.println(s.indexOf("ak"));//返回-1
System.out.println("--------");
// String substring(int start):从start开始截取字符串到字符串结尾
System.out.println(s.substring(0));
System.out.println(s.substring(5));
System.out.println("--------");
// String substring(int start,int end):从start到end截取字符串。含start,不含end。
System.out.println(s.substring(0, s.length()));
System.out.println(s.substring(3,8));
}
}
③转换方法
public char[] toCharArray ()
:将此字符串转换为新的字符数组。public byte[] getBytes ()
:使用平台的默认字符集将该 String编码转换为新的字节数组。public String replace (CharSequence target, CharSequence replacement)
:将与target匹配的字符串使用replacement字符串替换。
示例:
public class DemoThree {
public static void main(String[] args) {
//创建字符串对象
String s = "abcde";
// char[] toCharArray():把字符串转换为字符数组
char[] chs = s.toCharArray();
for(int x = 0; x < chs.length; x++) {
System.out.println(chs[x]);
}
System.out.println("-----------");
// byte[] getBytes ():把字符串转换为字节数组
byte[] bytes = s.getBytes();
for(int x = 0; x < bytes.length; x++) {
System.out.println(bytes[x]);
}
System.out.println("-----------");
// 替换字母it为大写IT
String str = "it男";
String replace = str.replace("it", "IT");
System.out.println(replace); // IT男
System.out.println("-----------");
}
}
④分割方法
public String[] split(String regex)
:将此字符串按照给定的regex(规则)拆分为字符串数组。
示例:
/**
String[] "a,b,c,d".split(","),把"a,b,c,d"按照逗号切割,将切割后的多个子字符串存入String[] 中
*/
public class String_Demo03 {
public static void main(String[] args) {
//创建字符串对象
String s = "aa,bb,cc";
String[] strArray = s.split(","); // ["aa","bb","cc"]
for(int x = 0; x < strArray.length; x++) {
System.out.println(strArray[x]); // aa bb cc
}
}
}
注意:
当给定的regex是.时,需要进行转义:split("\\.") ;原因是,因为.在java中是特殊字符