Java核心技术卷一 -第三章:字符串

系列文章目录

Java核心技术卷一 -第一章:java“白皮书”的关键术语
Java核心技术卷一 -第三章:数据类型
Java核心技术卷一 -第三章:变量与常量
Java核心技术卷一 -第三章:运算符


前言

本人为java初学者,文章内容仅为个人学习总结分享,其中包含了大量Java核心技术卷一里面的文章内容以及一些网站文章内容,由于参考文章过多,在此并不一一列出,如有侵权,请联系删除。

一、了解

Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。每个用双引号括起来的字符串都是String类的一个实例:

String e=""; //an empty string
String greeting = "Hello";

二、子串

String类的substring方法可以从一个较大的字符串提取出一个子串。例如:

String greeting ="Hello";
String s = greeting.substring(0,3);
    创建一个由字符"Hel"组成的字符串。

注意:

1、substring方法的第二个参数是不想复制的第一个位置。这里要复制位置为0、1和2(从0到2,包括0和2)的字符。在substring中从0开始计数,直到3为止,但不包含3。

2、substring的工作方式有一个优点:容易计算子串的长度。字符串s.substring(a,b)的长度为b-a。例如,子串"Hel"的长度为3-0=3。

三、不可变字符串

String类没有提供修改字符串中某个字符的方法。如果希望将目标字符串的内容修改,那又如何办呢?其实在Java中实现这项操作非常容易。可以提取想要保留的子串,再与希望替换的字符拼接。

这样做是否会降低运行效率呢?看起来好像修改一个代码单元要比从头创建一个新字符串更加简洁。答案是:也对,也不对。的确,通过拼接"el"和"p!"来创建一个新字符串的效率确实不高。但是,不可变字符串却有一个优点:编译器可以让字符串共享。

为了弄清具体的工作方式,可以想象将各种字符串存放在公共的存储池中。字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。

总而言之,Java的设计者认为共享带来的高效率远远胜过于提取子串、拼接字符串所带来的低效率。可以看看你自己的程序,我们发现:大多数情况下都不会修改字符串,而只是需要对字符串进行比较(有一种例外情况,将来自于文件或键盘的单个字符或较短的字符串组装成字符串。为此,Java提供了一个单独的类,以后将介绍)。

四、检测字符串是否相等

可以使用equals方法检测两个字符串是否相等。对于表达式:

s.equals(t)

如果字符串s与字符串t相等,则返回true;否则,返回false。需要注意的是,s与t可以是字符串变量,也可以是字符串字面量。例如,以下表达式是合法的:

    "Hello".equals(greeting)

要想检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法

"Hello".equalsIgnoreCase("hello")

一定不要使用==运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否存放在同一个位置上。当然,如果字符串在同一个位置上,它们必然相等。但是,完全有可能将内容相同的多个字符串副本放置在不同的位置上。
例子:在这里插入图片描述

如果虚拟机始终将相同的字符串共享,就可以使用== 运算符检测是否相等。但实际上只有字符串字面量是共享的,而+或substring等操作得到的字符串并不共享。因此,千万不要使用== 运算符测试字符串的相等性,以免在程序中出现这种最糟糕的bug,看起来这种bug就像随机产生的间歇性错误。

五、构建字符串

有些时候,需要由较短的字符串构建字符串,例如,按键或来自文件中的单词。如果采用字符串拼接的方式来达到这个目的,效率会比较低。每次拼接字符串时,都会构建一个新的String对象,既耗时,又浪费空间。使用StringBuildera类就可以避免这个问题的发生。

如果需要用许多小段的字符串来构建一个字符串,那么应该按照下列步骤进行。

首先,构建一个空的字符串构建器:
    StringBuilder builder new StringBuilder();
    
当每次需要添加一部分内容时,就调用append方法。
    builder.append(ch);//appends a single character
    builder.append(str);//appends a string
    
在字符串构建完成时就调用toString方法,将可以得到一个String对象,其中包含了构建器中的字符序列。
    String completedString = builder.toString();

例子:

public class head {
    public static void main(String[] args) {
    StringBuilder builder=new StringBuilder();
        builder.append("str");
                builder.append('i');
                String comp=builder.toString();
                System.out.println(comp);
    }
}

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

总结

以上就是本文的内容,记录了关于一些关于java字符串的内容,本人也是刚开始接触java,不能保证总结内容的正确性,若是有错误的话,欢迎大家指出,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luodiab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值