groovy 字符串截取最后一个_Java基础篇——字符串详解

字符串的声明

字符串是内存中连续排列的0个或多个字符。不变字符串是指字符串一旦创建,其内容就不能改变,Java中使用String类来处理不变字符串,在对String类的实例进行查找、比较、拼接等操作时,既不能输入新字符,又不能改变字符串的长度。

Java程序中的字符串分为常量和变量两种,其中,字符串常量使用双引号括起来的一串字符,系统为程序中出现的字符串常量自动创建一个String对象。例如:

System.out.println("hello world!");

这句话将创建一个String对象,值为“hello world!”。

对于字符串变量,在使用之前要显式声明,并进行初始化。

字符串的声明方式有三种:

  • 直接创建: String str1 = "Hello";

字符串是对象,虽然我们在这里没有用new创建对象,其实是编译器给我们做了这些操作。这种创建的字符串对象有一个特点,如果同样的对象如果存在了,就不会创建一个新的对象,而是指向了同样的对象。例如String str2 = "Hello";,则str1和str2是指向了字符串池中同样的内存地址,即 str1 == str2。

  • 使用字符串连接创建: String str = "Hello" + "World";

这种形式其实可以看做是第一种的形式的特殊形式。 "Hello" + "World"在编译期会被自动折叠为常量“HelloWorld”,所以,最后只会创建一个对象:String str = "HelloWorld";

JDK1.7开始,javac会进行常量折叠,全字面量字符串相加是可以折叠为一个字面常量,而且是进入常量池的。这个问题涉及到了字符串常量池和字符串拼接。
String a="a"+"b"+"c";
通过编译器优化后,得到的效果是:
String a="abc";
  • new创建字符串: String str1 = new String("Hello");

用new关键字创建的字符串每次都会创建一个新的对象。即使这时创建一个字符串

String str2 = new String("Hello");

str1与str2是两个对象,str1 != str2。

4cc7ce15cdfffe373aa3249f83b36beb.png
注意点:String str = new String("Hello"); 会产生几个对象?
如果字符串池里面没有“Hello”对象,会在字符串池里面生成一个对象,然后再生成一个字符串对象,str指向这个对象;如果字符串池里面已经有了“Hello”对象,则只会生成一个对象,str指向这个对象。

字符串的操作

字符串创建以后,可以使用字符串类中的方法对它进行操作。日常开发中常用的操作字符串的方法有:

  • String当中与获取相关的常用方法

public int length():获取字符串当中含有的字符个数,拿到字符串长度。

public String concat(String str):将当前字符串和参数字符串**拼接**成为返回值新的字符串。

public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。)

public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。

f83377bbf26af537f531098d01f7b501.png
  • 字符串的截取方法

public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。

public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串。

备注:[begin,end),包含左边,不包含右边。

faab5d0cc41c246f585dbd2e6e0f16b4.png
  • 字符串转换的方法

public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。

public byte[] getBytes():获得当前字符串底层的字节数组。

public String replace(CharSequence oldString, CharSequence newString):

将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。

备注:CharSequence意思就是说可以接受字符串类型。

507539fd9838e3d1f9ced72ef214c295.png
  • 分割字符串

public String[] split(String regex):按照参数的规则,将字符串切分成为若干部分。

注意事项
split方法的参数其实是一个“正则表达式”
转义必须写"."(两个反斜杠
如果split失败则返回一个空字符串数组,比如split(".")就会失败,正则不明确,程序不知道怎么切了。

ab2960f9a77162eabc9465ccc9f3cf07.png

字符串的比较

String字符串可以使用“==”和equals()方法比较。当两个字符串使用“==”进行比较时,比较的是两个字符串在内存中的地址。当两个字符串使用equals方法比较时,比较的是两个字符串的值是否相等。

6eb4c27b89e36bcbfee23bcd9da5f559.png

上面例子中,s1 和 s2 使用相同的字符串常量来定义,相同的字符串常量在系统内部只存在一个,即 s1 和 s2 都指向这同一个常量,所以使用 “==” 或 “equals”方法来判断时,结果都是相等的。而 s3 是使用字符串常量创建的另一个对象,虽然它与 s1 所含的字符是一样的,但却是不同的对象,故使用 “==” 判断时,s1 和 s3 是不相等的。类似的,s4 也是另一个对象,使用 “==” 判断时,s3 和 s4 页是不相等的。而 s5 与 s1 指向同一个实例,所以他们在两种方式下的比较都是相等的。

String、StringBuffer和StringBuilder的关系

String类的对象实例是不可变的,一旦创建就确定下来,对字符串施加操作后并不改变字符串本身,而是有生成了一个实例。对于那些需要改变内容并有许多操作的字符串,可以使用StringBuffer类或者StringBuilder类。它们之间的区别如下:

  • String是字符串常量,一旦创建就不能修改。对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去。String类是final修饰的,不能被继承。覆盖了equals方法和hashCode()方法。
  • StringBuffer是字符串可变对象,可以对字符串进行操作,修改字符串原有值时不会新建一个对象。执行效率较慢,但是线程安全。StringBuffer没有覆盖equals方法和hashCode()方法。可以动态的拼接字符换,使用 append() 方法。
  • StringBuilder也是字符串可变对象,同StringBuffer一样,可以对字符串进行操作,也不会新建对象。执行效率高效,但是线程不安全。

点个关注吧,我会持续更新,下期更精彩哦~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中链式调用_Java及Android中常用链式调用写法简单示例

本文实例讲述了Java及Android中常用链式调用写法。分享给大家供大家参考,具体如下:最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形式进行调用,最典型的就是RxJava。android…

C什么k什么_K线图基础知识丨什么是K线散兵坑形态?K线散兵坑形态的操作与案例详解...

本文总共999字,预计阅读需要3分钟今天我们给大家带来的是K线散兵坑形态,那么K线散兵坑形态应该怎么来操作呢?今天我们就结合相应的实战案例来为大家讲解一下吧。K线散兵坑形态的简介散兵坑是指在股价缓慢上涨过程中.成交量也逐渐放大&#xf…

support v4官方下载_掌心长兴客户端下载-掌心长兴ap下载v4.1.4 安卓官方版

掌心长兴app是一款为广大用户开发的新闻资讯软件。在这里用户可以清晰的了解今日热点新闻,最新新闻直播电台应有尽有!让你全方面了解周边新鲜事!还有各种常用功能的代办查询服务。有需要的用户,欢迎现在下载体验哦掌心长兴客户端介…

javafx 调用java_Java验证(javafx)

javafx 调用java验证是核心javafx框架所缺少的一件事。 为了弥补这一空白, controlsfx中已经存在一个第三方验证库 。 但是,我有一个问题:它不是在考虑FXML的情况下创建的。 这并不是说它不是一个很好的库,只是错过了这个细节&…

win10分辨率不能调整_Win10系统分辨率不能修改怎么办?屏幕分辨率的调节方法...

Win10系统电脑屏幕分辨率无法调节怎么办?电脑屏幕分辨率不能修改怎么办?近日有很多用户询问电脑显示器分辨率不能修改的问题,下面就给大家分享解决方法。解决方法:1、在win10系统桌面空白处单击鼠标右键,在弹出的菜单中…

笔记本电脑电源已接通未充电_dell xps15 电源已接通 未充电 维修方法

(去年写的文章,在知乎也存一份)网上类似的文章很多,这里总结一下,这个问题按照严重程度可以分为四个层次:电源计划问题,大部分百度出来说的都是这个,实际上这个问题 等于没有问题。改…

mysql bc_正则表达式——MySQL搜索过滤

正则表达式介绍在数据库的数据过滤过程中只用WHERE子句和LIKE操作符都是对于已知值进行的不管是匹配一个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,都是使用已知的值当然MySQL语句也提供了通配符百分号(%)和下划线(_)来匹配多…

everything安装版和便携版有什么区别_A2奶粉内幕:国行版和澳洲版有什么区别 贵的不一定好!...

点击上方蓝字 关注我们申明:此文章来自第三方平台,绝无倾向性诱导。二桐粑粑转载分享。A2是全球首款添加了“A2-β酪蛋白”的奶粉,由新西兰A2公司于2013年推出,这款奶粉在澳洲一上架,就被妈妈们一扫而空。之后A2公司针…

java 什么时候用递归_如果要用Java实现算法,一定慎用递归

现象 :递归是我们很经典的一种算法实现,可以很好的描述一个算法的原理!对于算法的描述、表现和代码结构理解上,递归都是不错的选择!但是本文想说的是java实现一个递归算法的时候尽量不要用递归实现,而是转换…

excel分两个独立窗口_Excel2010 多个独立窗口,解决单窗口无法显示多个文件的问题...

当我们需要编辑多个excel的时候,就会发现一个问题,Excel不能一个窗口下显示多个文档,每次编辑都进行切换就太麻烦了,那如何能解决这个问题呢?接下来跟我一起看看吧!首先在开始菜单输入regedit.exe命令&…

excel冻结窗口_excel怎么冻结窗口?excel冻结窗口怎么设置?

excel冻结行或列的技巧教程:一、冻结第一列1.选择 视图 > 冻结窗格 > 冻结第一列。2.列A和列B之间出现的细线表明第一列已冻结。二、冻结前两列1.选择第三列。2.选择 查看 > 冻结窗格 > 冻结窗格。三、冻结列和行1.选择要在滚动时保持可见的行下方和列右…

web service接口_win7 添加环回网卡+H3C 模拟器 防火墙开启Web功能

1、按下win R键,在其中输入:hdwwiz,然后点击“确定”或者按回车键,打开“添加硬件”对话框。2、看到如下界面时,选择“网络适配器”(如下图所示), 在接着出现的界面中,左方“厂商”一栏里选择“…

java 实现nfa的化简_DFA与NFA的等价性,DFA化简

等价性对于每个NFA M存在一个DFA M’,使得L(M)L(M’)--------等价性证明,NFA的确定化假定NFA M,我们对M的状态转换图进行以下改造:解决初始状态唯一性:引进新的初态结点X和终态结点Y,X,Y∉S,从X…

eclipse查看git地址_gitamp;github的入门实战

一、Git概述(1)定义Git是目前世界上最先进的分布式版本控制系统。(2)能干什么?解决冲突、管理权限、代码备份、协同开发、版本还原、历史追查、版本记录、分支管理、代码审查(3)集中管理型版本管…

使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...

发布-订阅消息系统在任何企业体系结构中都起着重要作用,因为它可以实现可靠的集成而无需紧密耦合应用程序。 在解耦的系统之间共享数据的能力并不是一个容易解决的问题。 考虑一个企业,其中具有使用不同语言和平台独立构建的多个应用程序。 它需要以响应…

LINUX系统无线网频繁断开_Ubuntu系统安装amp;amp;解决WiFi不可用

写系统安装的文章太多太多了,我为何还要写哪? 因为文章太多太多了,乍一看各种操作猛如虎,实际上可能对你没有一点的帮助。好多文章只是讲解了如何安装ubuntu系统,对于安装后遇到的问题只字不提,笔者决定写一…

return两个返回值_LeetCode 第四题 寻找两个有序数组的中位数

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 [1, 3]nums2 [2]​则中位数是 2.0示例 2:nums1 [1, 2]nums2 [3, 4]​则中…

intellij 使用_使用IntelliJ书签

intellij 使用这是有关IntelliJ的精美书签功能的快速帖子。 IntelliJ使您可以为单行代码添加书签。 将某行添加为书签后,您可以使用多种方法直接跳回该行。 因此,最好在您经常使用的代码位置添加书签。 要创建一个新书签,只需在代码编辑器中…

[即将举行的网络研讨会]对Kubernetes进行故障排除:您需要具备的7个关键组件

如果您没有听说过,那么容器正在吞噬整个世界。 这种转变正在改变我们在开发,交付和维护应用程序方面所知的一切,尤其是在解决错误方面。 有这么多动人的东西,让您难以发现潜伏在基于Kubernetes的应用程序中的关键问题。 传统的故…

php能打开.shp文件吗,shp文件是什么格式的

shape文件由ESRI开发,一个ESRI的shape文件包括一个主文件,一个索引文件,和一个dBASE表。其中主文件的后缀就是【.shp】。本文操作环境:Windows7系统,Dell G3电脑。shape文件由ESRI开发,一个ESRI(Environmen…