开始学习Java之后,便会接触到string类。string就像是C语言中常说的字符串,字符串其实就是一个String类的对象。
在这里我简单总结一下string类的用法特点,并且结合代码演示。
- 定义字符串
第一步我们先定义一下字符串。字符串的定义一般有两种方法,常用的是第一种直接赋值。
- 直接赋值 (直接赋值放在堆中常量池里):
String str1="hello Java ";
- 构造方法:intern 手动入池方法
String str2=new String("hello Java");
如果使⽤String构造⽅法就会开辟两块堆内存空间,并且其中⼀块堆内存将成为垃圾空
间,不会⾃动保存在对象池中,使⽤⼿动⽅法⼊池。
采用intern()方法:
String str1 = new String("hello").intern() ;
String str2 = "hello" ;
System.out.println(str1 == str2);//结果为false
- 字符串的拼接
String str = "hello";//将"hello"赋给str
str += " Java";//将" Java"连接上"hello"
String的拼接每次都会产生新的对象,以下列出了不同的拼接情况
String str = "helloJava";
String str2 = new String("helloJava");
System.out.println(str == str2);
String str3 = "helloJava";
System.out.println(str == str3);
String str4 = "hello"+"Java";//str4 = "helloJava"
System.out.println(str == str4);//true
System.out.println(str3 == str4);
String str5 = "hello";
String str6 = str5+"Java";//str5是一个变量
System.out.println(str == str6);//false
String str7 = "hello"+new String("Java");
System.out.println(str == str7);//false
String str8 = new String("hello") +new String("Java");
System.out.println(str == str8);//false
String str9 = new String("student").intern();
String str10 = "student";
System.out.println(str9 == str10);
String str11 = new String("" +"hellobit").intern();
System.out.println(str == str11);
- 字符串比较
1.使用equals()方法比较
String str = null;
String str2 = new String("hello Bit");
System.out.println(str.equals(str2));
2.区分大小写比较:
String str=“abcde”;
String str1=“Abcde”;
System.out.println(str.equals(str1));//结果为false
3.不分大小写:
String str=“abcde”;
String str1=“Abcde”;
System.out.println(str.equalsIgnoreCase(str1));//结果为true
4.比较字符串大小compareTo()
比较的是从0号下标开始的第一个不相同的字符的Asscil的值。
例如:
tring str=“abcde”;
String str1=“Abcde”;
System.out.println(str.compareTo(str1)); //结果为32
- 字符串查找
a.判断一个子字符串是否存在
String str=“abcde”;
System.out.println(str.contains(“bc”));
b.根据下标获取某个字符串
获取字符方式为String charAt(),括号里面为要获取的字符串下标
System.out.println("获取下标为3的字符"+new String("abcdefgh").charAt(3))
c.从指定位置开始查找指定字符串,找到返回下标位置,找不到返回-1
String str = "abcdefgh" ;
System.out.println(str.indexOf("ef")); //4
String str = "abcdefgh" ;
System.out.println(str.indexOf("hi"));//-1
使⽤indexOf()的注意点,如果查找内容重复,它只能返回查找的第⼀个位置
String str = "abcdefghef" ;
System.out.println(str.indexOf("ef"));//4
d.从指定位置开始查找
String str = "abcdefgh" ;
System.out.println(str.lastIndexOf("b",1));
e.从后往前查找指定字符串
String str=“abcdefgh”;
System.out.println(str.lastIndexOf(“b”));//
- 字符串替换
String str1 = "abcdefbc";//3
//把第一个参数替换为第二个参数
String str2 = str1.replaceAll("bc","xx);
System.out.println(str2);
String str3 = str1.replaceFirst("bc","xx");
System.out.println(str3);
- 字符拆分
a.全部拆分
String str = "i am a boy" ;
String[] result = str.split(" ") ; // 按照空格拆分
for(String s: result) {
System.out.println(s);
}
- 判断一个字符是否为数字(Character.isDigit(str.charAt(i))
public static boolean isNumber(String str) {
for (int i = 0; i < str.length(); i++) {
if(!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
- 将字符串变为数组
char[] chars = str3.toCharArray();
System.out.println(Arrays.toString(chars));