Java常用类03:String类

String类是final修饰的,不可变长的类

字符串的存储和创建

字符串是常量,创建之后不可改变。字符串字面值存储在常量池中(方法区),可以共享

public class Hello {
    public static void main(String[] args) {
        //创建字符串的两种方式
        String s1 = "java";  //这种方式,会在常量池中创建一个字符串,可以共享
        String s2 = new String("java");  //这种方式,会同时在堆和常量池创建两个字符串
        String s3 = "java";
        System.out.println(s1 == s2);  //false,==用于比较两个字符串引用是否指向同一个对象,显然s1和s2不一样
        System.out.println(s1 == s3);  //true,因为常量池已经有了一个"java",故指向同一个常量
        System.out.println(s1.equals(s2));  //true,equals用于比较两个字符串对象的值是否相等,一般我们的目的就是这个,因此推荐只使用equals()方法(String类重写了Object类的equals()方法,因此对于字符串来说,内容相同就相同)
    }
}
//String s1 = "abc",本质上其实是先生成一个字符数组,再将其转换为字符串
char[] data = {'a', 'b', 'c'};
String str = new String(data);

valueOf()方法

public class Hello {
    public static void main(String[] args) {
        char[] data = {'1', '2'};
        
        //String.valueOf()方法和new String()对象,都可以将其他数据类型转换为字符串
        //注意Arrays.toString()是完整的打印出数组,并不能得到想要的字符串
        //copyValueOf()只能将字符数组转换为字符串,功能不如valueOf()多
        System.out.println(String.valueOf(data));
        System.out.println(new String(data));
    }
}

length()、toCharArray()、contains()方法

import java.util.Arrays;

public class Hello {
    public static void main(String[] args) {
        String a = "Java是最好的编程语言";
        System.out.println(a.length());  //获取字符串的长度
        System.out.println(Arrays.toString(a.toCharArray()));  //[J, a, v, a, 是, 最, 好, 的, 编, 程, 语, 言],将字符串还原成字符数组
        System.out.println(a.contains("Java"));  //判断当前字符串中是否包含某字符串
    }
}

charAt()、indexOf()、lastIndexOf()方法

public class Hello {
    public static void main(String[] args) {
        String a = "Java是最好的编程语言";
        System.out.println(a.charAt(2));  //根据下标获取字符。不同于python,字符串中的字符索引不能直接通过for循环获取,只能使用charAt()方法获取
        System.out.println(a.indexOf("a"));  //查找字符首次出现的下标
        System.out.println(a.lastIndexOf("a"));  //查找字符最后一次出现的下标
    }
}

toUpperCase()、endsWith()、compareTo()方法

public class Hello {
    public static void main(String[] args) {
        String a = "Java";
        System.out.println(a.toUpperCase());  //字符串转大写
        System.out.println(a.toLowerCase());  //字符串转小写
        
        String file = "Hello.java";
        System.out.println(file.endsWith("java"));  //判断字符串是否以什么结尾
        System.out.println(file.startsWith("H"));  //判断字符串是否以什么开头
        
        String s1 = "hello";
        String s2 = "HELLO";
        System.out.println(s1.compareTo(s2));  //32,两个字符串中第一个不相等字符的Unicode编码之差
        System.out.println("abc".compareTo("abcdef"));  //-3,如果前面的部分完全相同,那就是比较长度差
    }
}

trim()、replace()、split()、substring()方法

import java.util.Arrays;

public class Hello {
    public static void main(String[] args) {
        String a = "    Python 是最好的编程语言     ";
        System.out.println(a.trim());  //去掉字符串首尾的空格
        System.out.println(a.replace("Python", "Java"));  //替换字符串

        String s = "Java 是最好的++编程语言";
        System.out.println(Arrays.toString(s.split(" ")));  //[Java, 是最好的++编程语言],以空格为分隔符
        System.out.println(Arrays.toString(s.split("[ +]")));  //[Java, 是最好的, , 编程语言],如果有多种分隔符,用[]括起来
        System.out.println(Arrays.toString(s.split("[ +]+")));  //[Java, 是最好的, 编程语言],如果分隔符可能连续出现多次,在[]外再加上+号

        System.out.println(Arrays.toString(s.split("")));  //如果分隔符不填,默认是每个字符都分割,和toCharArray()方法效果一样
        System.out.println(Arrays.toString(s.toCharArray()));

        String str = "this is a text";
        String[] s1 = str.split(" ");
        
        for (String ss : s1){
            char first = Character.toUpperCase(ss.charAt(0));  //将每个单词的首字母大写,借助包装工具类
            System.out.print(first + ss.substring(1) + " ");  //substring()方法可以截取指定位置以后的字符串,将首字母和后面的部分拼接
        }
    }
}
posted @ 2021-09-08 21:03  振袖秋枫问红叶  阅读(66)  评论(0)    收藏  举报