Java语言:字符串的总结和需要注意的地方

目录

String类

创建String对象

String常用方法简介

String常用方法(上)

String常用方法(下)

字符串与byte数组间的转换

等于运算符与equals方法的区别

字符串的不可变性

StringBuilder概述

StringBuilder常用方法


String类

创建String对象

创建String对象不只是下面这三种方法

 

 

String常用方法简介


 

String常用方法(上)

length(用于计算字符串的长度)

对于字符串而言,这里要引进一个概念,就是索引,我们在计算字符串的长度和字符串中字符的位置的时候,都是按照它们的索引进行计算的,举例如下图,其实你发现索引和数组下标是非常相像的,还有一点就是空格也会被算作是一个字符,从下面的索引标号就可以看出

下面是API文档的描述

下面是示例代码

charAt方法(这个方法就是对字符串中的字符进行截取)

截取的位置是按照索引来的,比如下面的例子中对索引为6的字符进行截取,那么结果就是“程“

下面是API文档描述

subString方法(这个方法就是字符串进行子串的截取,这个方法有两个不同的参数列表)

下面是API文档描述

对于第一个方法,就是从beginIndex开始截取字符串到最后,但是对第二个方法而言,可以在指定的地方进行截取,截取的位置是beginIndex到endIndex前面一位,从API描述可以看出,如下图

 

 

String常用方法(下)

IndexOf(这个方法的作用是找到字符或者是字符串所在的位置)

API描述如下

这里就以第一个为例,举例如下(举例中因为字符和整型数据可以通过ASCII码进行转换,所以可以使用字符)

这里穿插一个知识点,就是对于特殊的字符,需要使用转义字符进行输出,比如双引号或者单引号,简单点就是要给它们加上斜杠,对于这个斜杠很多时候都会和除号傻傻分不清,因为自己也有这样一个问题,所以刚才想了一下,虽然不是什么好办法,终究是一个办法啊!既然你和除号傻傻分不清,反正在键盘上,就只有除号和转义字符长那个样子,那么除了除号,就是转义字符咯,以后打的时候注意不要打成除号就好了

lastIndexOf(这个方法是寻找字符或者是字符串最后出现的位置)

API描述如下

 

 

字符串与byte数组间的转换

将数据传输到网络上,因为网络上传输的数据就是二进制字节型的,所以要将字符串转换为字节型数据,同样在接受到数据之后,我们也要把字节型数据重新转换为字符串型数据

将字符串转换为字节型数据,需要用到的方法是getBytes,API描述如下,参数列表可以指定编码格式,也可以不指定编码格式,如果指定编码格式要抛出异常

将字节型数据转换为字符串,需要用到的是String类的构造方法,String类中的有一个构造方法可以使用byte数组作为参数,API描述如下,在这里还可以指定编码格式

在进行数据转换的时候,一定要注意一点那就是:

使用什么编码进行转换,就是用什么编码转换回去,否则会出现乱码

示例如下

改变编码方式,转变前和转变后的编码方式都跟着改变,并且还要抛出一个编码异常,如下

 

 

等于运算符与equals方法的区别

equals方法比较就是字符串的内容是否相同,例子如下(下面两个equals比较语句的结果都是true)

对于等于符号这里要引入内存、栈、堆、常量池的概念

等于运算符使用例子如下

上图中的结果的原因如下(它们指向的引用地址不同,如果是str1和str2那么结果返回的就是true)

这里有一个题目,可以看一下,因为字符串和数组的存储方式不同,它们是没有办法通过equals方法进行比较的,题目如下

 

 

字符串的不可变性

字符串的不可变性就是字符串是不可变的,一旦被定义(这里的不可变不代表不能被修改,看下面的例子体会一下)

这里可以看出,s1本来是没有变的,因为imooc常量还在常量池中,它只是改变了s1的引用地址,将s1指向了“hello imooc”而已

从下面这个例子也可以看出s1是没有变的(上例子)

 

 

StringBuilder概述

为什么不常用StringBuffer而是使用线程不安全的StringBuilder呢?

答:虽然我基本都没有运用到实践中,但是老师说了,因为在大多数情况下,进行字符串处理的时候,都是是使用单线程进行处理的,线程安全主要是在多线程的情况下,所以StringBuilderxiao

 

 

StringBuilder常用方法

这里的常用方法就不做过多的赘述了,因为我之前已经写了一篇常用方法的介绍,地址如下

https://blog.csdn.net/qq_41419525/article/details/108254272

这里还要说一个点就是StringBuilder的对应于String类的字符串可变性,举个例子体会一下吧!例子如下

对str进行输出的时候,str已经变成了“hello,imooc”,这和我们平时的思维不一样,因为它没有将操作后的值重新赋值给str,str却已经变了,这就是字符的可变性,所以在进行多次操作一个字符串的时候,可以使用StringBuilder类

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值