JavaSE--String类

发布时间 2023-08-15 21:38:23作者: 洛小依ovo

一、String内存图

// jvm内存图
String s1 = "abcde";
String s2 = "abcde" + "zz";
String s3 = new String("yy");

垃圾回收器不会释放常量

 

二、比较字符串最好使用String类中重写的equal方法

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // true
// s1 与 s2 都存放在字符串常量区中,s1 与 s2 都直接指向字符串常量区同一地址,所以为true

String s3 = new String("efd");
String s4 = new String("efd");
System.out.println(s3 == s4); // false
// 通过new关键字创建对象,会在堆内存中创建,
// s3 与 s4 在堆内存中创建的对象都指向字符串常量区的“efd”
// 但是s3 与 s4 指向堆内存中的对象的不一样 所以为false
System.out.println(s3.equal(s4)); // true

 

三、String类中常用的构造方法

String s = new String("");
String s = "";
String s = new String(char数组);
String s = new String(char数组,起始下标,长度);
String s = new String(byte数组);
String s = new String(byte数组,起始下标,长度)
// 最常用
String s = "";
String s = new String("");
byte[] bytes = {97,98,99};// 97 a   98 b   99 c
// 将byte数组中全部转换为字符串
String s2 = new String(bytes);
System.out.println(s2);// abc

// String(字节数组,数组元素下标的起始位置,长度)
// 将byte数组中的一部分转换成字符串。
String s3 = new String(bytes, 1, 2);
System.out.println(s3); // bc
// 将char数组全部转换成字符串
char[] chars = {'你','好','大','家','好'};
String s4 = new String(chars);
System.out.println(s4);

// 将char数组的一部分转换成字符串
String s5 = new String(chars, 2, 3);
System.out.println(s5);// 大家好

 

四、String类常用方法

1、获取下标位置的字符CharAt

//char charAt(int index)
char c = "大家好".charAt(1);
System.out.println(c); // 家

2、字符串之间比较大小compareTo

// 2(了解).int compareTo(String anotherString)
// 字符串之间比较大小不能直接使用大于小于号,需要使用compareTo方法
int result = "abc".compareTo("abc");
System.out.println(result); //0(等于0) 前后一致  

int result2 = "abcd".compareTo("abce");
System.out.println(result2); //-1(小于0) 前比后小

int result3 = "abce".compareTo("abcd");
System.out.println(result3); // 1(大于0) 前比后大

3、前面字符串中是否包含后面的子字符串contains

//boolean contains(CharSequence s)
// 判断前面的字符串中是否包含后面的子字符串
System.out.println("HelloWorld.java".contains(".java")); // true
System.out.println("http://www.baidu.com".contains("https://")); // false

4、判断当前字符串是否以某个子字符串结尾endsWith

//boolean endsWith(String suffix)
// 判断当前字符串是否以某个子字符串结尾
System.out.println("test.txt".endsWith(".java")); // false
System.out.println("test.txt".endsWith(".txt")); // true

5、比较两个字符串是否相等equal

//boolean equals(Object anObject)
// 比较两个字符串必须使用equals方法,不能使用“==”
// equals只能看出相等不相等。
// compareTo方法可以看出是否相等,并且同时还可以看出谁大谁小。
System.out.println("abc".equals("abc")); // true

6、判断两个字符串是否相等,并且忽略大小写equalsIgnoreCase

//boolean equalsIgnoreCase(String anotherString)
// 判断两个字符串是否相等,并且同时忽略大小写
System.out.println("ABc".equalsIgnoreCase("abC")); // true

7、将字符串对象转换成字节数组getBytes

//byte[] getBytes()
// 将字符串对象转换成字节数组
byte[] bytes = "dslds".getBytes();
for(int i = 0; i < bytes.length; i++){
    System.out.println(bytes[i]);
}

8、判断某个子字符串在当前字符串中第一次出现处的索引indexOf

//int indexOf(String str)
// 判断某个子字符串在当前字符串中第一次出现处的索引
System.out.println("abcedabcaaedaa".indexOf("ed"));

9、isEmpty

10、length

11、lastIndexOf

12、replace

13、split

14、startsWith

15、substring

16、substring

17、toCharArray

18、toLowerCase

19、toUpperCase

20、trim

21、valueOf

//boolean isEmpty()
// 判断某个字符串是否为“空字符串”。底层源代码调用的应该是字符串的length()方法。
//String s = "";
String s = "a";
System.out.println(s.isEmpty());

//int length()
// 判断数组长度是length属性,判断字符串长度是length()方法。
System.out.println("abc".length());
System.out.println("".length());

//int lastIndexOf(String str)
// 判断某个子字符串在当前字符串中最后一次出现的索引(下标)
System.out.println("aaaaabbbbbaaa".lastIndexOf("aa")); 

//String replace(CharSequence target, CharSequence replacement)
// 替换
String newString = "http://www.baidu.com".replace("http://", "https://");
System.out.println(newString); //https://www.baidu.com
// 把以下字符串中的“=”替换成“:”
String newString2 = "name=zhangsan&password=123&age=20".replace("=", ":");
System.out.println(newString2); //name:zhangsan&password:123&age:20

//String[] split(String regex)
// 拆分字符串
String[] ymd = "200-11-11".split("-");
for(int i = 0; i < ymd.length; i++){
    System.out.println(ymd[i]);
}
String param = "name=zhangsan&password=123&age=20";
String[] params = param.split("&");
for(int i = 0; i <params.length; i++){
    System.out.println(params[i]);
    // 可以继续向下拆分,可以通过“=”拆分。
}

//boolean startsWith(String prefix)
// 判断某个字符串是否以某个子字符串开始。
System.out.println("http://www.baidu.com".startsWith("http")); // true
System.out.println("http://www.baidu.com".startsWith("https")); // false

//String substring(int beginIndex) 参数是起始下标。
// 截取字符串
System.out.println("http://www.baidu.com".substring(7)); //www.baidu.com

//String substring(int beginIndex, int endIndex)
// beginIndex起始位置(包括)
// endIndex结束位置(不包括)
System.out.println("http://www.baidu.com".substring(7, 10)); //www

//char[] toCharArray()
// 将字符串转换成char数组
char[] chars = "我是中国人".toCharArray();
for(int i = 0; i < chars.length; i++){
    System.out.println(chars[i]);
}

//String toLowerCase()
// 转换为小写。
System.out.println("ABCDefKXyz".toLowerCase());

//String toUpperCase();
System.out.println("ABCDefKXyz".toUpperCase());

//String trim();
// 去除字符串前后空白
System.out.println("      aaa      bbb        ".trim());

//String中只有一个方法是静态的,不需要new对象
// 这个方法叫做valueOf
// 作用:将“非字符串”转换成“字符串”
//String s1 = String.valueOf(true);
// 这个静态的valueOf()方法,参数是一个对象的时候,会自动调用该对象的toString()方法
String s1 = String.valueOf(new Customer());
System.out.println(s1); // 没有重写toString()方法之前是对象内存地址