辉仔日记之学代码第五期——String类和StringBuilder(知识点回顾)

本文详细探讨了Java中String与StringBuilder的创建方式、内存管理、常用方法及其区别,重点讲解了String的不可变特性与StringBuilder的可变优势,以及如何高效地操作字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

标题一、String类

    1、创建格式:

    2、直接赋值和构造方法的内存区别

    3、构造方法

    4、字符串的常用方法 

    5、String类型的所有方法

标题二、StringBuilder

    1.String与StringBuilder的异同

    2、创建格式

    3、常用的方法

    4、全部方法


前言:

    上一篇文章辉仔回忆了关于类与对象的知识点。简单介绍了什么是类,什么是对象。类是对对象的描述,对象就是客观事物。这一期主要是讨论各种各样的封装方法。主要涉及String类。主要从它们是什么,他们怎么用从这两个方面分析。希望对大家有用!

    辉仔每篇文章都是用心总结,如果有错误希望大家给我指正,如果大家觉得辉仔的文章帮助到你了,那么请给我来个一键三连!!!

标题一、String类

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

    1、创建格式:

最简单的创建String类莫过于以下格式:

String s =“点赞收藏与评论”;

    在代码中,遇到像字符串中的常量,这里的常量是“点赞收藏与评论”,编译器会建一个s的对象,然后将常量值放在公共池里面。

既然字符串是对象,那么可以用构造器创造对象。

构造方法创建字符串。

String s1 =new String ("点赞收藏与评论");

 

 

    2、直接赋值和构造方法的内存区别

String s ="点赞收藏与评论";
String s2="点赞收藏与评论";//共用一个常量,只有一个对象

String s1 =new String("点赞收藏与评论");//拥有两个对象

     内存示意图:

     在用直接赋值时,jvm会创建对象,把“点赞收藏与评论”放在堆内存里的常量池里。(记住相同的值只会存在一个)。当谁需要使用时,常量池里的值把对象返回回去。也就是s和s2在有相同的常量值的时候。会把相同的地址赋值给s或s2,也就是可以共享。

    但是在用构造方法创建时就会不同,在面对s时会创建一个对象,遇见new又会创建一个对象,将“点赞收藏与评论”放在new的内存里。调用的时候便不会使用常量池里的内容。如果再创建一个新的构造方法,但是具有相同的“点赞收藏与评论”,现实情况是不会调用原来的地址赋值,而是创建新的地址。造成了内存空间的浪费。所以一般都是用直接赋值。

 

    3、构造方法

String有11种构造方法,目前我就只分享四种,其他的内容大家可以私信回复我。

直接看代码图!

public class Demo_2 {
    public static void main(String[] args) {
        /*创建一个空白字符串对象,不含有任何内容*/
        String s1 = new String();
        System.out.println("s1:" + s1);


        /*(char[] chs)根据字符数组的内容,来创建字符串对象*/
        char[] chs = {'a', 'b', 'c'};
       String s2 = new String(chs);
        System.out.println("s2:" + s2);

        /*(byte[] bys)根据字节数组的内容,来创建字符串对象*/
        byte[] bys = {97, 98, 99};
        String s3 = new String(bys);
        System.out.println("s3:" + s3);


        /* s =   “abc”;直接赋值的方式创建字符串对象,内容就是abc*/
        String s4 = "abc";
        System.out.println("s4:" + s4);

    }
}

 

    4、字符串的常用方法 

    字符串的长度

    String 类的一个方法是 length() 方法,它返回字符串对象包含的字符数。

public class Demo_3 {
    public static void main(String[] args) {
        String jjj ="123456789";
        jjj.length();

        System.out.println(jjj.length());

    输出为:9;

--------   -----------     -----------     ---------    ---------    ---------    ------   -----   ------  --------   ------------

    连接字符串

    (1)使用操作符来连接

“可口”+“可乐”=“可口可乐”

    (2) 使用 concat() 方法

Strings.concat(Strings1)
"美丽的新房子".concat("真漂亮")

--------   -----------     -----------     ---------    ---------    ---------    ------   -----   ------  --------   ------------ 

    遍历的方法 

    使用charAt()和length()方法

    代码如下:

public class Demo_5 {
    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        String jjj = sc.nextLine();//字符串的遍历

        for (int i=0;i<jjj.length();i++) {
            System.out.println(jjj.charAt(i));

        }

    5、String类型的所有方法

SN(序号)方法描述
1char charAt(int index)
返回指定索引处的 char 值。
2int compareTo(Object o)
把这个字符串和另一个对象比较。
3int compareTo(String anotherString)
按字典顺序比较两个字符串。
4int compareToIgnoreCase(String str)
按字典顺序比较两个字符串,不考虑大小写。
5String concat(String str)
将指定字符串连接到此字符串的结尾。
6boolean contentEquals(StringBuffer sb)
当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。
7static String copyValueOf(char[] data)
返回指定数组中表示该字符序列的 String。
8static String copyValueOf(char[] data, int offset, int count)
返回指定数组中表示该字符序列的 String。
9boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。
10boolean equals(Object anObject)
将此字符串与指定的对象比较。
11boolean equalsIgnoreCase(String anotherString)
将此 String 与另一个 String 比较,不考虑大小写。
12byte[] getBytes()
 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
13byte[] getBytes(String charsetName)
使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
14void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
将字符从此字符串复制到目标字符数组。
15int hashCode()
返回此字符串的哈希码。
16int indexOf(int ch)
返回指定字符在此字符串中第一次出现处的索引。
17int indexOf(int ch, int fromIndex)
返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
18int indexOf(String str)
 返回指定子字符串在此字符串中第一次出现处的索引。
19int indexOf(String str, int fromIndex)
返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
20String intern()
 返回字符串对象的规范化表示形式。
21int lastIndexOf(int ch)
 返回指定字符在此字符串中最后一次出现处的索引。
22int lastIndexOf(int ch, int fromIndex)
返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
23int lastIndexOf(String str)
返回指定子字符串在此字符串中最右边出现处的索引。
24int lastIndexOf(String str, int fromIndex)
 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
25int length()
返回此字符串的长度。
26boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
27boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
28boolean regionMatches(int toffset, String other, int ooffset, int len)
测试两个字符串区域是否相等。
29String replace(char oldChar, char newChar)
返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
30String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
31String replaceFirst(String regex, String replacement)
 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
32String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
33String[] split(String regex, int limit)
根据匹配给定的正则表达式来拆分此字符串。
34boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。
35boolean startsWith(String prefix, int toffset)
测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
36CharSequence subSequence(int beginIndex, int endIndex)
 返回一个新的字符序列,它是此序列的一个子序列。
37String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
38String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
39char[] toCharArray()
将此字符串转换为一个新的字符数组。
40String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
41String toLowerCase(Locale locale)
 使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
42String toString()
 返回此对象本身(它已经是一个字符串!)。
43String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
44String toUpperCase(Locale locale)
使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
45String trim()
返回字符串的副本,忽略前导空白和尾部空白。
46static String valueOf(primitive data type x)
返回给定data type类型x参数的字符串表示形式。
47contains(CharSequence chars)
判断是否包含指定的字符系列。
48isEmpty()
判断字符串是否为空。

ps:转自菜鸟教程

标题二、StringBuilder

    1.String与StringBuilder的异同

    在我们学习的过程中如果创建字符串,然后直接赋值,如果拼接的话,会不会在内存的常量池中,是把两个地址值合并一起然后原来的地址值消失呢?根据String的不可变的特性,那么原来的地址值不可能消失。那么只有一种可能性,就是再创建一个值在常量池。

    如图:

     经过编译后,jvm执行,sup对象名放在栈内存里,在常量池创建一个新的值“收藏”,sup1的值也在常量池创建一个新的对象“点赞”。如果要进行拼接操作,那么不会使引用两个原来值的地址,是再创建一个新的地址“收藏点赞”,将新的地址给sup3.那么这样做必定会浪费许多时间和内存空间。那么有没有更好的方法,像数组一样随时修改呢。这里辉仔向大家介绍StringBuilder,它的特性是可进行修改,且速度快。就像图中的sup4中的内容我可以随意修改。地址值都是一样的。

    String:内容不可变。

    StringBuilder:内容可变。

    读到这里辉仔就相信你就理解了String与StringBuilder的区别了!

    2、创建格式

    • Constructor

      描述
      StringBuilder​()

      构造一个没有字符的字符串构建器,初始容量为16个字符。

      StringBuilder​(int capacity)

      构造一个没有字符的字符串构建器,以及由 capacity参数指定的初始容量。

      StringBuilder​(CharSequence seq)

      构造一个字符串构建器,其中包含与指定的 CharSequence相同的字符。

      StringBuilder​(String str)

      构造一个初始化为指定字符串内容的字符串构建器。

    以上表格转于JDK

    代码如下:

   StringBuilder app = new StringBuilder();
        System.out.println("点赞收藏与转发");

        StringBuilder app2 = new StringBuilder("点赞收藏与转发");
        System.out.println(app2);

    3、常用的方法

这里辉仔将介绍4个StringBuilder的常用方法。

    (1)public StringBuilder append(...):将char参数的字符串类型添加到里面,返回长度加1.

StringBuilder app = new StringBuilder();
app.append(点赞);
app.append("收藏");
app.append("与转发");
System.out.println(app);

输出效果 :点赞收藏与转发

 

    (2)public StringBuilder reverse():导致该字符序列被反序列的相反代替

app.reverse();
System.out.println(app);

输出效果:发转与藏收赞点

 

 

    (3)public String toString():将当前StringBuilder对象转换为String对象。

//StringBuilder转换成String
StringBuilder spp= new StringBuilder("点赞收藏与转发");

String change = spp.toString();

System.out.println(change);

 

 

    (4)StringBuilder deleteCharAt(int index):char按此顺序删除指定位置。

StringBuilder spp= new StringBuilder("点赞收藏与转发");
String qq = spp.toString();
System.out.println(qq);

spp.deleteCharAt(1);
System.out.println(spp);

输出效果:

点赞收藏与转发

点收藏与转发

    4、全部方法

所有方法 实例方法 具体的方法
变量和类型方法描述
StringBuilderappend​(boolean b)

将 boolean参数的字符串表示形式追加到序列中。

StringBuilderappend​(char c)

将 char参数的字符串表示形式追加到此序列。

StringBuilderappend​(char[] str)

将 char数组参数的字符串表示形式追加到此序列。

StringBuilderappend​(char[] str, int offset, int len)

将 char数组参数的子数组的字符串表示形式追加到此序列。

StringBuilderappend​(double d)

将 double参数的字符串表示形式追加到此序列。

StringBuilderappend​(float f)

将 float参数的字符串表示形式追加到此序列。

StringBuilderappend​(int i)

将 int参数的字符串表示形式追加到此序列。

StringBuilderappend​(long lng)

将 long参数的字符串表示形式追加到此序列。

StringBuilderappend​(CharSequence s)

将指定的字符序列追加到此 Appendable 。

StringBuilderappend​(CharSequence s, int start, int end)

将指定的 CharSequence序列追加到此序列。

StringBuilderappend​(Object obj)

追加 Object参数的字符串表示形式。

StringBuilderappend​(String str)

将指定的字符串追加到此字符序列。

StringBuilderappend​(StringBuffer sb)

将指定的 StringBuffer追加到此序列。

StringBuilderappendCodePoint​(int codePoint)

将 codePoint参数的字符串表示形式追加到此序列。

intcapacity()

返回当前容量。

charcharAt​(int index)

返回指定索引处的此序列中的 char值。

IntStreamchars()

返回 int的流,对此序列中的 char值进行零扩展。

intcodePointAt​(int index)

返回指定索引处的字符(Unicode代码点)。

intcodePointBefore​(int index)

返回指定索引之前的字符(Unicode代码点)。

intcodePointCount​(int beginIndex, int endIndex)

返回此序列的指定文本范围内的Unicode代码点数。

IntStreamcodePoints()

返回此序列中的代码点值流。

intcompareTo​(StringBuilder another)

StringBuilder字典顺序比较两个 StringBuilder实例。

StringBuilderdelete​(int start, int end)

删除此序列的子字符串中的字符。

StringBuilderdeleteCharAt​(int index)

按此顺序删除指定位置的 char 。

voidensureCapacity​(int minimumCapacity)

确保容量至少等于指定的最小值。

voidgetChars​(int srcBegin, int srcEnd, char[] dst, int dstBegin)

将字符从此序列复制到目标字符数组 dst 。

intindexOf​(String str)

返回指定子字符串第一次出现的字符串中的索引。

intindexOf​(String str, int fromIndex)

从指定的索引处开始,返回指定子字符串第一次出现的字符串中的索引。

StringBuilderinsert​(int offset, boolean b)

将 boolean参数的字符串表示形式插入此序列中。

StringBuilderinsert​(int offset, char c)

将 char参数的字符串表示形式插入此序列中。

StringBuilderinsert​(int offset, char[] str)

将 char数组参数的字符串表示形式插入此序列中。

StringBuilderinsert​(int index, char[] str, int offset, int len)

将 str数组参数的子数组的字符串表示形式插入此序列中。

StringBuilderinsert​(int offset, double d)

将 double参数的字符串表示形式插入此序列中。

StringBuilderinsert​(int offset, float f)

将 float参数的字符串表示形式插入此序列中。

StringBuilderinsert​(int offset, int i)

将第二个 int参数的字符串表示形式插入此序列中。

StringBuilderinsert​(int offset, long l)

将 long参数的字符串表示形式插入此序列中。

StringBuilderinsert​(int dstOffset, CharSequence s)

将指定的 CharSequence插入此序列。

StringBuilderinsert​(int dstOffset, CharSequence s, int start, int end)

将指定的 CharSequence序列插入此序列。

StringBuilderinsert​(int offset, Object obj)

将 Object参数的字符串表示形式插入此字符序列中。

StringBuilderinsert​(int offset, String str)

将字符串插入此字符序列。

intlastIndexOf​(String str)

返回指定子字符串最后一次出现的字符串中的索引。

intlastIndexOf​(String str, int fromIndex)

返回指定子字符串最后一次出现的字符串中的索引,从指定索引开始向后搜索。

intlength()

返回长度(字符数)。

intoffsetByCodePoints​(int index, int codePointOffset)

返回此序列中的索引,该索引从给定的 index偏移 codePointOffset代码点。

StringBuilderreplace​(int start, int end, String str)

使用指定的 String的字符替换此序列的子字符串中的字符。

StringBuilderreverse()

导致此字符序列被序列的反向替换。

voidsetCharAt​(int index, char ch)

指定索引处的字符设置为 ch 。

voidsetLength​(int newLength)

设置字符序列的长度。

CharSequencesubSequence​(int start, int end)

返回一个新的字符序列,它是该序列的子序列。

Stringsubstring​(int start)

返回一个新的 String ,其中包含此字符序列中当前包含的字符的子序列。

Stringsubstring​(int start, int end)

返回一个新的 String ,其中包含当前包含在此序列中的字符的子序列。

voidtrimToSize()

尝试减少用于字符序列的存储空间。

 以上就是我要介绍的内容,希望对小伙伴儿们真正有用!

ps:不定期更新自己学习Java的心得体会。以日记的方式见证自己的成长或者退步哈哈哈!!!

记得点赞转发评论呀!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值