Java基础-String常用的方法

发布于:2025-07-13 ⋅ 阅读:(13) ⋅ 点赞:(0)

String常用的三种构造方法

    public static void main(String[] args) {
        //1.使用常量字符串构造
        String s1 = "1.Hello world";
        System.out.println(s1);

        //2.使用new关键字构造
        String s2 = new String("2.Hello world");
        System.out.println(s2);

        //3。使用字符数组构造
        char[] ch = {'H','e','l','l','o'};
        String s3 = new String(ch);
        System.out.println(s3);

        //输出字符串长度
        System.out.println(s1.length());
        System.out.println("hello".length());//字符串中这种写法也是ok的

        //判断字符串长度是否为0
        System.out.println(s1.isEmpty());//输出false


        /*String s4 = null;
        System.out.println(s4.isEmpty());//会报空指针错*/

        String s5 = "";//字符串为0返回true
        System.out.println(s5.isEmpty());
    }
  • 字符串是引用型变量,变量需要用“”一对双引号引起来 
  • null和字符串为0不是一个概念

介绍String对象中四种常见的比较

日常中,遇到字符串比较的情况还是比较多的;"=="对于String这种引用型变量来说,比较的是一个哈希地址,是比较不了字符串中的内容是否相等的:

    public static void main(String[] args) {
        String s1 = new String("abc");
        String s2 = new String("abc");
        String s3 = s1;
        System.out.println(s1 == s2);//false
        System.out.println(s1 == s3);//true
        
    }

由结果可见,s1和s2是两个不同的对象,自然的地址也不同,用"=="去比较输出的结果固然是false,可以理解成"=="比较两个引用变量引用的是否为同一个对象;

那么如何可以比较字符串中的内容是否相等呢?我们引出了equals()方法(按照字典序比较);在使用equals的时候,String类重写了父类Object中equals()方法,使得可以比较字符串内的内容。

而equals方法返回的是一个布尔值,我们并不知道字符串之间的关系,所以我们引入了返回int类型的compareTo()方法,也是同样的按照字典序比较:

     

    值得注意的是它的比较规则:

    1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
    2. s1>s2返回大于0的数字;s1=s2返回0;s1<s2返回小于0的数字
    3. 返回值是对应字符ASCII码的差值

    那么如果我们需要忽略大小写的比较又该用哪一个方法呢?比如我们文件名或扩展名检查、用户名或密码的校验,通常都是需要忽略大小写来增加灵活性的,可以用compareToIgnoreCase(String str) 方法;这个方法和compareTo()的使用方法和规则是一样的,只是它忽略大小写去对字符串进行比较;

    字符串查找String提供的部分常用方法

    以下是部分常用的方法及使用的规则案例:

     

     

    字符串转换

    1.其他数据类型转换成字符串用 valueOf方法:

     

    2.字符串的大小写转换toUpperCase()&toLowerCase()

    3. 字符串转数组用toCharArray()

    public static void main(String[] args) {
            //字符串转数组
            String s1 = "hello world";
            char[] ch = s1.toCharArray();
            for (int i = 0; i < ch.length; i++) {
                System.out.println(ch[i]);
            }
            //数组转字符串,直接使用String转就好
            String s2 = new String(ch);
            System.out.println(s2);
        }

     4.格式化字符串用到format()

     字符串的替换:

    注意:针对这种直接赋值没有对象的字符串,在Java中会又一块特殊的字符串常量池,存放他们;字符串常量池中不会存在两个一样的字符串,如果两个字符串一样的画它们的地址值是一样的;

    字符串拆分

        public static void main(String[] args) {
            String str = "abc def Good evening";
            //1.将字符串全部拆分
            String[] result = str.split(" ");//按空格
            for (String res:result){
                System.out.println(res);
            }
            System.out.println("==========================");
            //2.部分拆分
            String[] result2 = str.split(" ",3);
            for (String res2:result){
                System.out.println(res2);
            }
            //3.有特殊字符的字符串分割要记得加上转义符
            String str2 = "192.168.1.1" ;
            String[] result3 = str.split("\\.") ;//转义符
            for(String s: result) {
            System.out.println(s);
            }
        }

     

    1. 部分拆分时,程序不会根据字符串的长短去平均分;而是根据先后顺序,分成相应的份数,后面的就不分了
    2. 有些特殊字符作为分割符可能无法正确切分, 需要加上转义
    3. 字符"|","*","+"都得加上转义字符,前面加上 "\\"
    4. 如果是 "\"需要拆分 ,那么就得写成 "\\\\"
    5. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

     以上所有涉及到修改字符串内容的操作都是创建一个新对象,改变的是新对象,而不是在原有的字符串上改动,不管是字符串转换、格式化又或时字符串截取等等,原有的字符串还是原来的,而修改后的字符串是一个新的字符串对象;

    似上面这种修改字符串的情况,如果放在循环里面每次循环都会创建一个新的对象,产生比较多的临时对象,对程序来说效率是比较低的,我们在使用的时候也需要尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

     那么如果想要修改字符串中内容,该如何操作呢?于是有了StringBuilder和StringBuffer类

    StringBuilder和StringBuffer类

    StringBuilder和StringBuffer类是为了方便字符串的直接修改而产生的这两个类大部分功能是相同的,不同的是StringBuilder会比较经常用在单线程的问题上,而StringBuffer会用更多的应用到多线程的问题上。下面是一些比较常用的方法,大部分都是和String当中的方法重合的

    String、StringBuffer、StringBuilder的区别

    • String是字符串常量不可变的,一旦创建就不能修改,任何对String的操作都会创建新的字符串对象。而StringBuilder和StringBuffer是可变的。

    • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作;在安全操作方面StringBuffer>StringBuilder>String

    • StringBuilder和StringBuffer类大部分功能相同


    感谢大家阅读📚点赞👍收藏⭐评论✍关注❤

    博客主页: 【长毛女士-CSDN博客

    水平有限,欢迎大家纠错啦♥


    网站公告

    今日签到

    点亮在社区的每一天
    去签到