博客
关于我
Java —— 字符串
阅读量:299 次
发布时间:2019-03-03

本文共 2246 字,大约阅读时间需要 7 分钟。

Java字符串操作及StringBuilder的使用

在Java编程中,字符串的操作是一个非常基础但重要的技能。字符串在Java中是不可变的对象,这意味着每次对字符串进行操作时,实际上会创建新的字符串对象。这一特性虽然提供了安全性,但也带来了性能上的消耗。因此,在频繁修改字符串时,使用StringBuilder会比直接使用String更为高效。

Java字符串的不变性

字符串在Java中是不可变的。一旦创建了一个字符串对象,它的内容将无法被修改。任何修改操作实际上都会生成新的字符串对象,而不是修改原有的对象。例如:

String s1 = "爱慕课";s1 = "欢迎来到:" + s1;

在上述代码中,s1 变量首先指向了存储在内存中的字符串对象。随后,s1 = "欢迎来到:" + s1 语句实际上是创建了一个新的字符串对象,并将s1 重新赋值为这个新对象的引用。原有的字符串对象仍然存在内存中,但不再被使用。

这种不可变性带来了几个重要的性质:

  • Immutable性:字符串对象不能被修改,任何修改操作都会生成新的对象。
  • 内存管理:由于每次修改都需要创建新的字符串对象,频繁操作字符串可能导致内存占用增加。使用StringBuilder可以避免这种情况。
  • 比较方法== 运算符比较对象的引用地址,而 equals() 方法比较对象的内容。如果两个字符串对象的内容相同,但引用地址不同,== 运算符返回 false,而 equals() 方法返回 true
  • String类的常用方法

    Java的 String 类提供了丰富的方法来处理字符串操作。以下是一些常用方法:

    • length():返回字符串的长度。
    • charAt(int index):返回指定索引位置的字符。
    • indexOf(String str):搜索字符串 str 在当前字符串中的位置。
    • substring(int beginIndex, int endIndex):提取子字符串。
    • toLowerCase()toUpperCase():将字符串转换为小写或大写。
    • split(String regex):将字符串按正则表达式分割。

    例如:

    String fileName = "HelloWorld.java";int index = fileName.indexOf(".");String prefix = fileName.substring(index);if (index != -1 && index != 0 && prefix.equals(".java")) {    System.out.println("Java文件名正确");} else {    System.out.println("Java文件名无效");}

    StringBuilder类的介绍

    为了高效处理字符串的修改操作,Java提供了 StringBuilder 类。它能以更高的效率进行字符串的追加、插入和删除操作。StringBuilder 的主要优势在于它是不可变的,但它的修改操作不会创建新的对象,而是直接修改内部的缓冲区。

    示例:

    StringBuilder hobby = new StringBuilder("爱慕课");hobby.append("学习");System.out.println(hobby.toString());

    StringBuilder的常用方法

    StringBuilder 类提供了多种方法来操作字符串:

    • append(Object obj):追加对象的字符串表示。
    • insert(int index, Object obj):在指定位置插入对象的字符串表示。
    • delete(int index):删除指定位置的字符。
    • replace(int start, int end, String replacement):替换子字符串。
    • reverse():反转字符串。

    例如:

    StringBuilder sb = new StringBuilder("hello");sb.insert(2, "世界");System.out.println(sb.toString());

    练习:统计字符‘a’的出现次数

    编写一个Java程序,统计指定字符串中字符‘a’的出现次数。

    public class HelloWorld {    public static void main(String[] args) {        String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";        int num = 0;        for (int i = 0; i < s.length(); i++) {            if (s.charAt(i) == 'a') {                num++;            }        }        System.out.println("字符'a'的出现次数是:" + num);    }}

    运行结果:字符‘a’的出现次数是:15。

    通过以上内容,我们可以清楚地看到,Java字符串操作的基本原理以及如何通过 StringBuilder 来高效处理字符串修改操作。掌握这些知识对你在Java编程中将会非常有帮助。

    转载地址:http://wpil.baihongyu.com/

    你可能感兴趣的文章
    opencv8-图像模糊
    查看>>
    opencv9-膨胀和腐蚀
    查看>>
    OpenCV_ cv2.imshow()
    查看>>
    opencv_core.dir/objects.a(vs_version.rc.obj)‘ is incompatible with i386:x86-64 output
    查看>>
    opencv——图像缩放1(resize)
    查看>>
    opencv——最简单的视频读取
    查看>>
    Opencv——模块介绍
    查看>>
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>
    OpenCV与AI深度学习 | CoTracker3:用于卓越点跟踪的最新 AI 模型
    查看>>
    OpenCV与AI深度学习 | OpenCV中八种不同的目标追踪算法
    查看>>
    OpenCV与AI深度学习 | OpenCV图像拼接--Stitching detailed使用与参数介绍
    查看>>
    OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(一) :直接拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(二) :基于模板匹配拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
    查看>>
    OpenCV与AI深度学习 | SAM2(Segment Anything Model 2)新一代分割一切大模型介绍与使用(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | T-Rex Label !超震撼 AI 自动标注工具,开箱即用、检测一切
    查看>>
    OpenCV与AI深度学习 | YOLO11介绍及五大任务推理演示(目标检测,图像分割,图像分类,姿态检测,带方向目标检测)
    查看>>
    OpenCV与AI深度学习 | YOLOv10在PyTorch和OpenVINO中推理对比
    查看>>