java基础—String

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


String  meaasge ="java资讯";

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

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

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

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

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

1. 拼接字符串

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

先来看concat 方法

         String msg1 ="java";
          String msg2 ="资讯";
          String resultMsg = msg1.concat(msg2);
          System.out.println(resultMsg);

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

   String msg1 ="java";
          String msg2 ="资讯";
          String resultMsg = msg1+msg2;
          System.out.println(resultMsg);

输出结果:

在这里插入图片描述

2. 获取字符串长度

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

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

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

现在有一个字符串


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

输出结果:1

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

输出结果:3

4.字符串包含

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

输出结果:true

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

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

输出结果: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);

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

在这里插入图片描述

扩展:

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

compareTo 一样

String msg1 = "a";
        String msg2 = "A";
        int i = msg1.compareToIgnoreCase(msg2);
        System.out.println(i);

输出结果:

在这里插入图片描述

  • 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);

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

== 比较的是内存地址,相同返回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);

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

代码从上至下执行,会先在公共区创建 "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);

输出结果:true

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

输出结果:

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


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

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

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

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);

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值