java基础学习笔记2(8.9)

news2024/11/25 12:50:18

String

equals比较堆里值

字符串比较用str1.equals(str2);

==比较栈里的值

JDK7以后字符串常量池进入了堆里面。

在Java中,StringBuffer 和 StringBuilder 是用于创建可变字符串的类。它们提供了比 String 更高效的字符串操作,尤其是在需要频繁修改字符串时。以下是关于如何使用这两个类的详细说明。

1. StringBuffer

StringBuffer 是线程安全的,适合在多线程环境下使用。它的主要方法包括:

  • append(): 在字符串末尾添加内容
  • insert(): 在指定位置插入内容
  • delete(): 删除指定范围的内容
  • reverse(): 反转字符串
示例代码
public class StringBufferExample {
    public static void main(String[] args) {
        // 创建 StringBuffer 对象
        StringBuffer sb = new StringBuffer("Hello");

        // 添加内容
        sb.append(" World");
        System.out.println("After append: " + sb);

        // 插入内容
        sb.insert(5, ",");
        System.out.println("After insert: " + sb);

        // 删除内容
        sb.delete(5, 6); // 删除逗号
        System.out.println("After delete: " + sb);

        // 反转字符串
        sb.reverse();
        System.out.println("After reverse: " + sb);
    }
}

2. StringBuilder

StringBuilder 是非线程安全的,但在单线程环境中性能更好。它的用法与 StringBuffer 非常相似。

示例代码
public class StringBuilderExample {
    public static void main(String[] args) {
        // 创建 StringBuilder 对象
        StringBuilder sb = new StringBuilder("Hello");

        // 添加内容
        sb.append(" World");
        System.out.println("After append: " + sb);

        // 插入内容
        sb.insert(5, ",");
        System.out.println("After insert: " + sb);

        // 删除内容
        sb.delete(5, 6); // 删除逗号
        System.out.println("After delete: " + sb);

        // 反转字符串
        sb.reverse();
        System.out.println("After reverse: " + sb);
    }
}

选择使用 StringBuffer 还是 StringBuilder

  • 使用 StringBuffer: 当你需要在多线程环境中安全地操作字符串时。
  • 使用 StringBuilder: 当你在单线程环境中进行大量字符串操作时,StringBuilder 性能更佳。

总结

  • StringBuffer 和 StringBuilder 都是可变的字符串类,适合频繁修改字符串的场景。
  • StringBuffer 是线程安全的,适合多线程环境;而 StringBuilder 是非线程安全的,适合单线程环境。
  • 两者提供了类似的方法用于字符串的操作,如 append()insert()delete(), 和 reverse()

在Java中,可以使用 String 类的 split() 方法来分割字符串。该方法根据指定的正则表达式将字符串分割成多个子字符串,并返回一个字符串数组。以下是一些常见的使用示例和注意事项。

1. 使用 split() 方法

基本用法
public class Main {
    public static void main(String[] args) {
        String str = "apple,banana,cherry";
        
        // 使用逗号分割字符串
        String[] fruits = str.split(",");
        
        // 输出结果
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

2. 指定分割次数

split() 方法还可以接受第二个参数,指定返回的数组的最大长度。这个参数可以用来限制分割的次数。

public class Main {
    public static void main(String[] args) {
        String str = "apple,banana,cherry,dates";
        
        // 只分割成两个部分
        String[] fruits = str.split(",", 2);
        
        // 输出结果
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

3. 使用正则表达式

split() 方法的参数是一个正则表达式,因此你可以使用更复杂的模式来分割字符串。

public class Main {
    public static void main(String[] args) {
        String str = "apple;banana|cherry,dates";
        
        // 使用正则表达式分割字符串
        String[] fruits = str.split("[;|,]"); // 分割符为 ;、| 和 ,
        
        // 输出结果
        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}

4. 注意事项

  • 空字符串: 如果字符串以分隔符开始或结束,或者有连续的分隔符,split() 方法会返回空字符串。

  • 正则表达式特殊字符: 如果分隔符是正则表达式中的特殊字符(如 .*+ 等),需要进行转义。

总结

  • 使用 String.split() 方法可以方便地分割字符串。
  • 可以根据需要指定分割符和分割次数。
  • 注意处理正则表达式的特殊字符和空字符串的情况。

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

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

相关文章

ICM-20948芯片详解(13)

接前一篇文章:ICM-20948芯片详解(12) 六、寄存器详解 2. USER BANK 0寄存器详述 (60)FIFO_COUNTH 高5位,计数表示FIFO中写入的字节数。 (61)FIFO_COUNTL 低8位,计数表…

IMAX ENHANCED认证的护眼三色激光投影仪,选极米 RS 10 Pro把专业IMAX影院带回家

对于追求大屏体验的用户来说,智能投影仪有着电视机无法比拟的优势。因此,智能投影仪如今也逐步替代传统电视机,成为了许多家庭的必备家电之一。对于当代年轻人而言,无论是追剧、看电影还是打游戏,大屏幕都始终比传统电…

西部数据拒绝2.62亿美元巨额赔偿:硬盘专利侵权案将上诉

西部数据(Western Digital,简称WD)被加州的一个陪审团裁定需支付2.62亿美元的赔偿金,原因是该公司侵犯了德国科学家Dieter Suess拥有的硬盘驱动器(HDD)记录技术专利。Suess是维也纳大学功能性材料物理学教授…

linux系统编程:进程(2)

1.在fork函数前打开函数和fork之后打开文件区别 1.fork之前open 子进程会继承父进程已打开的文件的相关信息所以,此时父子进程 会影响统一个offset值 2.fork之后open 父子进程各自有各自的打开文件的信息:相互之间不会有影响。 2.进程创建好之后: 1.任务--- …

Java流程控制01:用户交互Scanner

本节教学视频链接:https://www.bilibili.com/video/BV12J41137hu?p33&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p33&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Scanner 类用于扫描输入文本从字符串中提…

具备长短距离注意力模块的Lite Transformer

Transformer在自然语言处理(例如,机器翻译、问答)中已经变得无处不在;然而,它需要大量的计算才能实现高性能,这使得它不适合受硬件资源和电池严格限制的移动应用程序。在本文中,提出了一个高效的移动NLP架构,Lite Tran…

jq8900-16p与stm32f103c8t6测试

jq8900-16p与stm32f103c8t6测试 引言 本文从购买器件, 到连线步骤, 再到驱动的模块原理讲解, 后面根据不同的语音, 进行文字转语音步骤,全在资料导航里面. 本模块后面着重讲解, jq8900快速移植 本文资料导航 模块购买步骤 跳转 连线步骤 跳转 https://blog.csdn.net/qq_57484…

Vue的事件处理、事件修饰符、键盘事件

目录 1. 事件处理基本使用2. 事件修饰符3. 键盘事件 1. 事件处理基本使用 使用v-on:xxx或xxx绑定事件&#xff0c;其中xxx是事件名&#xff0c;比如clickmethods中配置的函数&#xff0c;都是被Vue所管理的函数&#xff0c;this的指向是vm或组件实例对象 <!DOCTYPE html&g…

探秘未来驾驶,汽车智能座舱软件测试的艺术与科学

什么是智能座舱软件测试 智能座舱软件测试是一种专门针对现代汽车中集成的先进驾驶辅助系统(ADAS)、信息娱乐系统、人机交互界面(HMI)以及其他智能座舱组件的软件质量保证过程。随着汽车行业的数字化和智能化转型&#xff0c;无人驾驶的出现&#xff0c;智能座舱已成为汽车用户…

Keepalived+Haproxy实现高可用

keepalived利用 VRRP Script 技术&#xff0c;可以调用外部的辅助脚本进行资源监控&#xff0c;并根据监控的结果实现优先 动态调整&#xff0c;从而实现其它应用的高可用性功能。 一、VRRP Script 配置 1、定义脚本 vrrp_script&#xff1a;自定义资源监控脚本&#xff0c;…

【光流估计】【深度学习】Windows11下FastFlowNet代码Pytorch官方实现与源码讲解

【光流估计】【深度学习】Windows11下FastFlowNet代码Pytorch官方实现与源码讲解 提示:最近开始在【光流估计】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【光流估计】【深度学习】Windows11下FastFlowNet代码Pytorch官方实现与源码讲解前言…

VUE系列之极速入门与实践教程

系列博客专栏&#xff1a; JVM系列博客专栏SpringBoot系列博客 实验环境 npm v10.8.1 node v20.16.0 vue.js v3.4.37 VSCODE 1.88.1 什么是Vue.js Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue.js 是一套构建用户界面的框架&…

聚合平台项目优化(门面模式,适配器模式,注册器模式)

前言&#xff1a; 这篇文章的思路就是抛出问题&#xff0c;再思考解决方案&#xff0c;最后利用设计模式解决问题 项目背景&#xff1a; 聚合搜索平台的主要功能就是一个有强大搜索能力的一个项目 用户输入一个词&#xff0c;同时可以搜索出用户&#xff0c;文章和图片这种…

【AI学习】具身智能的技术发展、商业路径等有趣观点

阅读了两篇有关具身智能的文章&#xff0c;有好多话语&#xff0c;挺有趣&#xff0c;做一些摘录。 一篇是&#xff1a;腾讯研究院的《具身智能的10个真问题&#xff5c;3万字圆桌实录》&#xff08;链接&#xff1a;https://mp.weixin.qq.com/s/peIi0YOJGKFV3fpLURDyyQ&#x…

一天搞定Vue3——包含Axios、ElementUI Plus、Vuex的使用!!!

前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!! 本篇文章会与vue2进行对比学习,并且也有很多的JavaScript知识点&#xff0c;要提前掌握他们才能学的效果更佳,见效更快。&#x1f973; 文章目录 Vue基础Vue的底层原理el挂载点data数…

Linux中网卡收发包的流程

进来在一个RTOS上移植开发网卡驱动&#xff0c;最终DMA收发包流程打通之后&#xff0c;在使用过程中觉得RTOS的处理逻辑太差了&#xff0c;因此有想法来梳理下Linux中对收发包流程处理&#xff0c;来给一些参考。 一、Linux接收网络包的流程 网卡是一个计算机的硬件&#xff0…

浅谈线性表——顺序表

文章目录 一、List接口二、线性表2.1、什么是线性表&#xff1f; 三、顺序表ArrayList什么是顺序表&#xff1f; 一、List接口 从上图看到List接口继承自Collection接口&#xff0c;而 ArrayList、LinkedList、Stack 类都实现了List接口&#xff0c;List是个接口&#xff0c;不…

论文新体验!分享8款人工智能AI软件论文网站

最近看到这个AI工具推广做的比较多&#xff0c;号称长文写的比kimi还要好&#xff01;难道大学生的救星下凡了&#xff1f;&#xff1f; 本文将分享8款优秀的AI软件论文网站&#xff0c;并重点推荐千笔-AIPassPaPer&#xff0c;这是一款备受用户好评的AI原创论文写作平台。 1…

C++ | 掌握C++异常处理:从基础到自定义异常体系的全面指南

09--异常 1、C语言传统的错误处理方式&#xff1a; 包括终止程序和返回错误码两种方式。 直接使用assert终止程序过于粗暴&#xff1a;用户无意的小错误也会造成程序结束运行。 return返回错误码&#xff0c;再通过错误码查找错误类型&#xff1a;过程繁琐&#xff0c;对用…

可视化基础的设计四大原则

一个好的数据可视化设计可以帮助观众迅速理解数据背后的意义。然而&#xff0c;如何确保我们的可视化设计既美观又简单易懂呢&#xff1f;本文将介绍四大设计原则——亲密原则、对比原则、对齐原则和重复原则。 1、 亲密原则&#xff08;Proximity&#xff09; 定义与应用&am…