• java基础—String


    我们都知道 创建一个字符串最简单的方式是

    
    String  meaasge ="java资讯";
    
    • 1
    • 2

    当然还可以用构造来创建 (不推荐,开发中不要用)

    String str2=new String("java资讯");
    
    • 1

    这两种创建最主要的区别在于,一个在公共池中,一个在堆内存中,不用想new 出来的都在内存中,代码的高效能节省很多成本,尽量不要让堆内存有压力,后面我们会知道,JVM 的优化都是在 堆内存中。。

    要想了解String ,我们先来学习它的API,看看官方给我们提供了什么样的方法来操作String

    这里列举一些工作中最常见的:

    1. 拼接字符串

    拼接字符串,这里有两种方法,concat 和 +

    先来看concat 方法

             String msg1 ="java";
              String msg2 ="资讯";
              String resultMsg = msg1.concat(msg2);
              System.out.println(resultMsg);
    
    • 1
    • 2
    • 3
    • 4

    输出结果:
    在这里插入图片描述
    再来看 + 号 ,这里+ 是拼接的意思

       String msg1 ="java";
              String msg2 ="资讯";
              String resultMsg = msg1+msg2;
              System.out.println(resultMsg);
    
    • 1
    • 2
    • 3
    • 4

    输出结果:

    在这里插入图片描述

    2. 获取字符串长度

       String  message = "java资讯";
            int length = message.length();
            System.out.println(length);
    
    • 1
    • 2
    • 3

    输出结果:
    在这里插入图片描述
    3. 字符串查询

    在字符串中,每个字符的位置是从 0 开始

    现在有一个字符串

    
    String  message = "java资讯"
    
    • 1
    • 2
    • 查询第一个字母a出现的位置
      String  message = "java资讯";
            int index = message.indexOf("a");
            System.out.println(index);
    
    • 1
    • 2
    • 3

    输出结果:1

    • 查询最后一个字母a出现的位置
          String  message = "java资讯";
            int a = message.lastIndexOf('a');
            System.out.println(a);
    
    • 1
    • 2
    • 3

    输出结果:3

    4.字符串包含

    • 判断字符串中是否包含a
       String  message = "java资讯";
            boolean a = message.contains("a");
            System.out.println(a);
    
    • 1
    • 2
    • 3

    输出结果:true

    - 判断字符串中是否包含 b

     String  message = "java资讯";
            boolean b = message.contains("b");
            System.out.println(b);
    
    • 1
    • 2
    • 3

    输出结果:false

    4.字符串比较(面试常问,开发常用)

    • compareTo
      compateTo 比较的是unicode值的大小,在java中,每一个字符都对应着他的unicode

    前者大于后者 返回正数

    前者等于后者 返回 0

    前者小于后者 返回负数

    例如:

    
            String msg1 = "a";
            String msg2 = "b";
            String msg3 = "A";
            String msg4 = "a";
            int i = msg1.compareTo(msg2);
            System.out.println(i);
    
            int i1 = msg1.compareTo(msg3);
            System.out.println(i1);
    
            int i2 = msg1.compareTo(msg4);
            System.out.println(i2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    输出结果(顺序从上至下):

    在这里插入图片描述

    扩展:

    compareToIgnoreCase 这个是不区分大小写的比较,比较结果返回原则跟

    compareTo 一样

    String msg1 = "a";
            String msg2 = "A";
            int i = msg1.compareToIgnoreCase(msg2);
            System.out.println(i);
    
    • 1
    • 2
    • 3
    • 4

    输出结果:

    在这里插入图片描述

    • equals
      equals 比较的是字符串内容是否相同 ,相同返回ture ,不同false
     String msg1 = "java资讯";
            String msg2 = "java";
            String msg3 = "java资讯";
            boolean flag1 = msg1.equals(msg2);
            System.out.println(flag1);
    
            boolean flag2 = msg1.equals(msg3);
            System.out.println(flag2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输出结果:
    在这里插入图片描述
    ==

    == 比较的是内存地址,相同返回true,不同false

     String msg1 = "java资讯";
            String msg2 = "java资讯";
            String msg3  =new String ("java资讯");
            String msg4 = new String("java资讯");
            boolean flag1 = msg1 == msg2;
            boolean flag2 = msg1 == msg3;
            boolean flag3 = msg3 == msg4;
            System.out.println(flag1);
            System.out.println(flag2);
            System.out.println(flag3);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    输出结果:
    在这里插入图片描述
    解析:

    代码从上至下执行,会先在公共区创建 "java资讯” 并且 将msg1指向这个对象

    接着执行第二行代码,会在公共区找有没有“java资讯” 这个对象,有就直接拿来用 ,所以msg1跟 msg2 内存地址相同,返回true

    msg3 new String (“java资讯”); 是在堆内存中重新开辟一块新的空间,因此msg1跟msg3不是同一个内存地址,返回false

    msg4 new String (“java资讯”); 这在堆内存中又开辟了一个新的空间,所以两个内存地址不同,返回 false

    从这里也可以看出,为什么不建议 用 new String (“java资讯”); String 的构造函数来创建字符串对象了,耗内存,效率低

    • 字符串匹配 matches
      matches 用来正则匹配,java进阶 会进行正则相关介绍,先记着有这么个方法 (可略过这个方法,用的比较少,几乎不用)
         String str = "123456789";
            boolean matches = str.matches("[0-9]*");
            System.out.println(matches);
    
    • 1
    • 2
    • 3

    输出结果:true

    • 字符串截取
      substring(int beginIndex) :从指定位置(包括指定位置)开始到字符串末尾
      String msg1 = "java资讯";
            String substring = msg1.substring(4);
            System.out.println(substring);
    
    • 1
    • 2
    • 3

    输出结果:

    在这里插入图片描述
    substring(int beginIndex, int endIndex):从指定位置(包括),截取到指定位置(不包括)

    
            String msg1 = "java资讯";
            String substring = msg1.substring(0,4);
            System.out.println(substring);
    
    • 1
    • 2
    • 3
    • 4

    输出结果:
    在这里插入图片描述
    最后我们来一个经典案例:

    正式开发中我们都会有一个需求,截取文件字符串,获取文件名等等

    String msg1 = “http://www.javazixun.com:8080/upload/2020-04-15-截取字符串文件.docx”;
    //获取最后一个 / 出现的位置
    int index = msg1.lastIndexOf(“/”);
    //获取文件名带后缀
    String substring1 = msg1.substring(index+1);
    System.out.println(substring1);

        //获取文件名不带后缀
        //获取最后一个. 出现位置
        int index1 = msg1.lastIndexOf(".");
        String substring = msg1.substring(index + 1, index1);
        System.out.println(substring);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    【写在最后】

    以上就是本期String字符串的常用api了

  • 相关阅读:
    「运维有小邓」EventLog Analyzer实时告警通知
    深度学习在图像处理中的应用学习笔记
    【回归预测-BP预测】基于灰狼算法优化BP神经网络实现数据回归预测附matlab代码
    四. 优化与源码
    fastjson漏洞批量检测工具
    五年前,我写错了一道面试题。
    工业物联网模块应用之砂芯库桁架机器人远程无线控制
    进程和线程有什么区别?
    基于大数据的安防体系建设研究和实践
    Rnn Lstm Gru 的 h 和 s 究竟需要 默认 随机 连续
  • 原文地址:https://blog.csdn.net/qq_42482058/article/details/127996917