Java零基础入门-String

举报
喵手 发表于 2025/01/31 23:36:26 2025/01/31
【摘要】 ​ 一、概述        近期有个小伙伴在看我的文章,说我在讲完基本类型,只是顺带提了一嘴String,然后说他的老师在课上对这String讲了足足一节课,好家伙,我觉得啊,这勾起了我的回忆,当初我看String的源码及知识点时,也是看了很久,这怪我,疏忽大意了啊。既然被这位小伙伴吐槽,那我就为大家在这期,简单跟大家来聊聊它吧。二、本期教学目标 掌握字符串概念掌握字符串子串提取掌握字符串拼...

 一、概述

        近期有个小伙伴在看我的文章,说我在讲完基本类型,只是顺带提了一嘴String,然后说他的老师在课上对这String讲了足足一节课,好家伙,我觉得啊,这勾起了我的回忆,当初我看String的源码及知识点时,也是看了很久,这怪我,疏忽大意了啊。

既然被这位小伙伴吐槽,那我就为大家在这期,简单跟大家来聊聊它吧。

二、本期教学目标

  •  掌握字符串概念
  • 掌握字符串子串提取
  • 掌握字符串拼接
  • 掌握不可变字符串概念
  • 掌握如何判断字符串是否相等
  • 掌握常用的StringApi

三、正文

1️⃣概念

        说起String字符串,我们都知道它是Unicode字符序列。比如:“hello”,它就是由5个Unicode字符组成,h e l l o 就是组成“hello”的Unicode的5个字符。在java中,我们都知道没有内置的字符串类型,而是在标准的java类库中提供了一个预定义类---String。每个用双引号括起来的字符串都是String类的一个实例。

具体如下:

String a = ""//空字符串

String b = "hello world!"

String c = "1"

2️⃣子串

        说到字符串,那自然我们会用到其本身提供的substring方法,该方法可以对字符串进行切割,从一个较大的字符串提取出一个子串。例如:

String str = "hello";

String subStr = str.substring(0,3);

        你们来解答一下,该subStr输出应该是什么?其实它就等于创建了一个新的字符串subStr = "hel"。

        解释一下:然后对于substring方法,对于它的第二个参数,其表示是不想复制的第一个位置。这里要复制的位置为0,1,2(从0到2,包括2),在substring中从0开始计算,直到3位置,但是不包含3,其中substring(0,3) == >[0,3),表示这个范围。

3️⃣拼接

        除了字符串可以切割,它也可以拼接,虽然你们可能会说,直接用“+”不就拼接了两个字符串嘛,是没问题。比如:

String a = "bug";
String b = "菌";

String c = a + b;

          给大家看下运行结果,是不是将a b字符串给拼接起来了?

        但是我这里想说的是,这里想介绍一下join()方法。其方法是可以将多个字符串给拼接起来,并且用一个界定符分隔开,还是很便利的。

具体演示代码如下:

    @Test
    public void test2() {

        String a = String.join("&","a","b","c");

        System.out.println(a);
    }

运行截图如下:

4️⃣不可变字符串

         我为什么说是不可变字符串呢?那是由于String类没有提供修改字符串的方法,比如对字符串进行某个字符修改,这没有提供,所以在java中,String类是不可变的,因为对于相同的字符串而言,它们其实是指向存储池中的同一个位置的。

        这样对于它不可变的好处就是能使字符串进行共享。

5️⃣检测字符串是否相等

        对于这个问题,项目中实在是太常见了,这不就用到了equals()方法,使用模板如下:

a.equals(b);

        如果对于字符串a与字符串b相等,则返回true,否则返回false。需要注意的是a与b可以是字符串变量,也可以是字符串字面量。具体演示如下;

    @Test
    public void test3() {

        String a = "a";
        String b = "a";
        System.out.println(a.equals(b));
    }

 运行结果如下:

         但是想要检查两个字符串不区分大小的情况下是否相等,那就可以用这个equalsIgnoreCase()。举例如下:

    @Test
    public void test3() {

        String a = "a";
        String b = "A";
        System.out.println(a.equalsIgnoreCase(b));
    }

        大家请看 如下运行截图:是不是也是返回了true。 

         还有一点需要大家注意的,也是经常会犯迷糊的。一定不要用 == 运算符判断两个两字符串是否相等,这个运算符只能够确定两个字符串是否存放在同一个位置上,当然,如果字符串存放在同一个位置上,这两字符串必然相等。但是完全有可能将内容相同的多个字符串副本位置放置不同的存储池位置上。

比如如下演示:


    @Test
    public void test4() {

        String a = "hello";
        String b = "hel";

        System.out.println(a == "hello");

        System.out.println(a.substring(0, 3));
        System.out.println(a.substring(0, 3) == b);
    }

       你们可以看下运行结果。 是不是发现了b字符串的值是[ hel ]啊,对字符串a进行substring方法截取后的字符串内容同样也是[ hel ],但是二者竟然不相等,为什么?这个大家可以去追究一下。 

       以上例子不就证实了我上面提到的结论,内容相同的字符串存储放置也可能会不同,所以用 == 运算符进行字符串校验,对于存储地址不同的两个同内容字符串,其判断结果自然就返回false。

         是不是有点子神奇?这个你们可以课后去研究研究,究竟背后的原理到底是啥?

6️⃣String Api

        对于String类,它包含了50多个方法。如下我来分享点String常用的Api。

  • boolean blank(); //如果字符串为空或者由空格组成,返回true,否则返回false。
  • int compareTo(String str); //按字典顺序,如果字符串位于str之前,返回一个负数,如果字符串位于str之后,返回一个正数;如果两字符串相等,则返回0。
  • boolean empth() //判断字符串是否为空。为空返回true,否则返回false。
  • ...




【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。