字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。
1.String是final的类,不可被继承,底层是char类型的数组
创建字符串的方式
String str1 = "Hello";//因为String类是final的,所以直接赋值的形式是str1指向常量。和基本数据类型一致,指向常量池
String str2 = new String("Hello");//new创建的字符串对象在堆上;和引用数据类型一致,str2指向对象地址
String str3 = "Hell"+"o";//此时的str3依旧指向常量,编译器编译过程提前识别
String str4 = str1 +str3;//虽然str1和str3都是常量,但编译器不会提前识别,此时的str4指向对象地址
2.length() ->获取字符串的长度
public class Main {
public static void main(String[] args) {
String str1 = "aabbcc";
int l = str1.length();
System.out.println(l);
}
}
执行结果:
6
3.cancat(String str) ->拼接字符串
public class Main {
public static void main(String[] args) {
String str1 = "aabbcc";
String str2 = "ddeeff";
String str3 = str1.concat(str2);
System.out.println(str3);
}
}
执行结果:
aabbccddeeff
实际情况更多使用"+"进行拼接,每一次拼接完都是新生成的String实例
public class Main {
public static void main(String[] args) {
String str1 = "aabbcc";
String str2 = "ddeeff";
String str3 = str1+str2;
System.out.println(str3);
}
}
执行结果:
aabbccddeeff
4.charAt(int index) ->返回指定索引位置的字符,索引范围从0到length()-1
public class Main {
public static void main(String[] args) {
String str1 = "abbcc";
char c = str1.charAt(1);
System.out.println(c);
}
}
执行结果:
b
5.int compareTo(String str) ->对字符串排序,将两个要字符串变成char[],从0索引位开始比较,当字符不同时返回差值,此时传入参数需要区分大小写,Z<a
public class Main {
public static void main(String[] args) {
String str1 = "bbcca";
String str2 = "bbccZ";
int i = str1.compareTo(str2);
System.out.println(i);
System.out.println('a'-'Z');
}
}
执行结果:
7
7
int compareToIgnoreCase(String str) ->对字符串排序,将两个要字符串变成char[],从0索引位开始比较,当字符不同时返回差值,此时传入参数不需要区分大小写,Z>a
public class Main {
public static void main(String[] args) {
String str1 = "bbcca";
String str2 = "bbccZ";
int i = str1.compareToIgnoreCase(str2);
System.out.println(i);
System.out.println('a'-'z');
}
}
-25
-25
6.static String copyValueOf(char[] c) -> String类中的静态方法,使得字符数组转成字符串。后面可以跟上两个int类型的索引指定返回的字符串内容。
public class Main {
public static void main(String[] args) {
String str1 = "abbcc";
char [] c = new char[]{'a','b','c','d','e'};
String str2 = String.copyValueOf(c);
//第二个参数时索引位置,第三个参数是偏移量
String str3 = String.copyValueOf(c,1,3);
System.out.println(str2);
System.out.println(str3);
}
}
执行结果:
abcde
bcd
7.boolean startsWith(String prefix) ->判断字符串是否以指定前缀开始
public class Main {
public static void main(String[] args) {
String str1 = "abbcc";
boolean flag1 = str1.startsWith("ab");
boolean flag2 = str1.startsWith("ac");
System.out.println(flag1);
System.out.println(flag2);
}
}
执行结果:
true
false
boolean endsWith(String suffix) ->判断字符串是否以指定后缀结尾
public class Main {
public static void main(String[] args) {
String str1 = "abbcc";
boolean flag1 = str1.endsWith("cc");
boolean flag2 = str1.endsWith("cd");
System.out.println(flag1);
System.out.println(flag2);
}
}
执行结果:
true
false
8.boolean equals(Object anObject) ->比较两个字符串内容是否相等,传入参数需要考虑大小写。该方法重写了Object的equals方法
public class Main {
public static void main(String[] args) {
String str1 = "abbcc";
String str2 = new String("abbcc");
//==比较的是对象内存地址
System.out.println(str1 == str2);
//比较的String对象内的具体char[]的每一位的值是否相等
System.out.println(str1.equals(str2));
}
}
执行结果:
false
true
boolean equalsIgnoreCase(String anotherString) ->比较两个字符串内容是否相等,传入参数不需要考虑大小写。
public class Main {
public static void main(String[] args) {
String str1 = "abbcc";
String str2 = new String("Abbcc");
System.out.println(str1.equals(str2));
System.out.println(str1.equalsIgnoreCase(str2));
}
}
执行结果:
false
true
9.byte[] getBytes() ->返回字符串byte类型的数组
public class Main {
public static void main(String[] args) {
String str1 = "abbcc";
byte[] b = str1.getBytes();
for(int i = 0;i<b.length;i++){
System.out.print(b[i]);
System.out.print("|");
}
}
}
执行结果:
97|98|98|99|99|
10.void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) ->将字符串从srcBegin位置到srcEnd位置间的字符逐个插入到char[] dst中,第一个插入位置是dstBegin
public class Main {
public static void main(String[] args) {
String str1 = "bbcca";
char[] c = new char[4];
for(int i = 0;i<c.length;i++){
System.out.print(c[i]);
System.out.print("|");
}
System.out.println();
//第一个参数:需要复制的字符串起始索引;(包含当前索引位置的字符)
//第二个参数:需要复制的字符串结束索引;(不包含当前索引位置的字符)
//第三个参数:目标字符数组
//第四个参数:开始复制的目标字符数组的起始位置
str1.getChars(1,3,c,1);
for(int i = 0;i<c.length;i++){
System.out.print(c[i]);
System.out.print("|");
}
}
}
执行结果:
| | | |
|b|c| |
char[] toCharArray() ->字符串转char[]数组
public class Main {
public static void main(String[] args) {
String str1 = "aabbcc";
char[] c = str1.toCharArray();
for(int i =0;i<c.length;i++){
System.out.print(c[i]);
System.out.print("|");
}
}
}
11.int indexOf(String str) ->返回目标字符在源字符串中第一次出现处的索引。未出现返回-1
public class Main {
public static void main(String[] args) {
String str1 = "bbbcca";
//从str1的0位置索引开始找第一次出现bcc的位置,返回2
int i1 = str1.indexOf("bcc");
//从str1的0位置索引开始找第一次出现cd的位置,没有找到返回-1
int i2 = str1.indexOf("cd");
//从str1的1位置索引开始找第一次出现bc的位置,返回2
int i3 = str1.indexOf("bc",1);
//从str1的2位置索引开始找第一次出现bb的位置,没有找到返回-1
int i4 = str1.indexOf("bb",2);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
}
}
执行结果:
2
-1
2
-1
int lastIndexOf(String str) ->返回目标字符串在源字符串中最后一次出现处的索引,未出现返回-1。因为要找最后一次出现的索引,所以实现是从末位往前找
public class Main {
public static void main(String[] args) {
String str1 = "bbbbcaca";
//从str1末位索引开始往前找字符串ca第一次出现的位置,返回下标6
int i1 = str1.lastIndexOf("ca");
//从str1末位索引开始往前找字符串bd第一次出现的位置,没有找到返回-1
int i2 = str1.lastIndexOf("bd");
//从str1的第5位索引(包含第5位)开始往前找字符串ca第一次出现的位置,返回下标4
int i3 = str1.lastIndexOf("ca",5);
//从str1的第5位索引(包含第5位)开始往前找字符串bd第一次出现的位置,没有找到返回-1
int i4 = str1.lastIndexOf("bd",5);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println(i4);
}
}
执行结果:
6
-1
4
-1
12.String intern() -> 返回一个String对象,该对象将直接指向调用对象的值在常量池的地址
public class Main {
public static void main(String[] args) {
//str1指向常量池的一个地址
String str1 = "bbbcca";
//str2指向堆内存中的一个地址,
String str2 = new String("bbbcca");
System.out.println(str1 == str2);
//根据str2的值指向常量池的一个地址
String str3 =str2.intern();
//指向堆内存中的一个地址
String str4 = str2;
System.out.println(str1 == str3);
System.out.println(str1 == str4);
}
}
执行结果:
false
true
false
13. boolean matches(String regex) ->判断该字符串是否符合入参的正则表达式
public class Main {
public static void main(String[] args) {
//str1指向常量池的一个地址
String str1 = "bbbbcaca";
boolean falg1 = str1.matches("[a-z]+");
boolean falg2 = str1.matches("[A-Z]+");
System.out.println(falg1);
System.out.println(falg2);
}
}
执行结果:
true
false
14. String replace(char oldChar, char newChar) -> 将源字符串中的oldchar替换成newchar
public class Main {
public static void main(String[] args) {
//str1指向常量池的一个地址
String str1 = "bbbbcaca";
String str2 = str1.replace('a','d');
System.out.println(str2);
}
}
执行结果:
bbbbcdcd
String replaceAll(String regex, String replacement) ->将源字符串中符合regex正则表达式的所有子字符串替换成replacement字符串
public class Main {
public static void main(String[] args) {
String str1 = "WWW.baidu.COM";
String str2 = str1.replaceAll("[A-Z]+","123");
System.out.println(str2);
}
}
执行结果:
123.baidu.123
String replaceFirst(String regex, String replacement) ->将源字符串中符合regex正则表达式的第一个子字符串替换成replacement字符串
public class Main {
public static void main(String[] args) {
//str1指向常量池的一个地址
String str1 = "WWW.baidu.COM";
String str2 = str1.replaceFirst("[A-Z]+","123");
System.out.println(str2);
}
}
执行结果:
123.baidu.COM
15. String[] split(String regex) -> 将源字符串按照regex正则表达式进行分割,返回一个String[]
public class Main {
public static void main(String[] args) {
String str1 = "www.baidu.com";
String[] strArr1 = str1.split("\\.");
//带参数表示生成的数组长度,如果是2,分割完第一份之后就不再分割了,将其余元素复制进数组下一个值
String[] strArr2 = str1.split("\\.",2);
for(int i = 0;i<strArr1.length;i++){
System.out.print(strArr1[i]+" ");
System.out.print(i+"|");
}
System.out.println();
for(int i = 0;i<strArr2.length;i++){
System.out.print(strArr2[i]+" ");
System.out.print(i+"|");
}
}
}
执行结果:
www 0|baidu 1|com 2|
www 0|baidu.com 1|
16. String substring(int beginIndex) ->字符串截取,从beginIndex截到最后
String substring(int beginIndex, int endIndex) ->字符串截取,从beginIndex截到endIndex(含头不含尾)。
public class Main {
public static void main(String[] args) {
String str1 = "aabbcc";
String str2 = str1.substring(2);
//含头不含尾
String str3 = str1.substring(2,4);
System.out.println(str2);
System.out.println(str3);
}
}
执行结果:
bbcc
bb
17.String toLowerCase() ->字符串转小写
String toUpperCase() ->字符串转小写
public class Main {
public static void main(String[] args) {
String str1 = "AAbbcc";
String str2 = str1.toLowerCase();
String str3 = str1.toUpperCase();
System.out.println(str2);
System.out.println(str3);
}
}
执行结果:
aabbcc
AABBCC
18. String trim() ->去首尾的空白符
public class Main {
public static void main(String[] args) {
String str1 = " AAbbcc ";
String str2 = str1.trim();
System.out.println(str1);
System.out.println(str2);
}
}
执行结果:
AAbbcc
AAbbcc
19. static String valueOf(Object o) ->调用实例的toString方法返回该字符串
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public static String valueOf(char data[], int offset, int count) {
return new String(data, offset, count);
}
public static String valueOf(boolean b) {
return b ? "true" : "false";
}
public static String valueOf(char c) {
char data[] = {c};
return new String(data, true);
}
public static String valueOf(int i) {
return Integer.toString(i);
}
public static String valueOf(long l) {
return Long.toString(l);
}
public static String valueOf(float f) {
return Float.toString(f);
}
public static String valueOf(double d) {
return Double.toString(d);
}
20.public boolean contains(CharSequence chars) ->如果包含指定的字符或字符串返回 true,否则返回 false。
public class Main {
public static void main(String[] args) {
String str1 = " AAbbcc ";
boolean flag1 = str1.contains("AA");
boolean flag2 = str1.contains("aa");
System.out.println(flag1);
System.out.println(flag2);
}
执行结果:
true
false
21. isEmpty() ->判断一个字符串是否为空
public class Main {
public static void main(String[] args) {
String str1 = " AAbbcc ";
boolean flag1 = str1.isEmpty();
boolean flag2 = "".isEmpty();
System.out.println(flag1);
System.out.println(flag2);
}
}
执行结果:
false
true