当前位置: 首页 > news >正文

【JavaSE】搞定String类

前言

本篇会细致讲解String类的常见用法,让小伙伴们搞定String类~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

常用的三种字符串构造

字符串长度length

字符串比较

==比较

比较字符串的内容equals

忽略大小写比较equalsIgnoreCase

比较字符串大小compareTo

忽略大小写比较compareToIgnoreCase

 获取字符串中某一个字符

通过字符获取下标indexOf

从指定位置开始找

从后的指定位置开始找lastIndexOf

转化

数值和字符串转化valueOf

字符串转数值parseInt和parseDouble 

大小写转化toLowerCase和toUpperCase

将字符串转数组toCharArray

格式化format

字符串替换replace

替换字符串的第一个replaceFirst和整体替换replaceAll

字符串拆分split

多次拆分

字符串截取substring

去掉字符串左右两边的空格trim

字符串不可变性

字符串拼接

​编辑

String、StringBuffer、StringBuilder的区别


常用的三种字符串构造

    public static void main(String[] args) {//直接赋值的方法, 定义字符串String str1="abcdef";//简写形式String str2=new String("hello Word!");//用字符数组 构造字符串char[]array={'a','b','c'};String str3=new String(array);System.out.println(str1);System.out.println(str2);System.out.println(str3);}

结果

String是引用类型,内部并不存储字符串本身

    // s1和s2引用的是不同对象 s1和s3引用的是同一对象String s1 = new String("hello");String s2 = new String("world");String s3 = s1;

字符串长度length

  • .length用于求字符长度
  • .isEmpty用于判断字符串是否为空
        String str1="abcdef";System.out.println(str1.length());//6String str2=null;System.out.println(str2);//nullSystem.out.println(str1.length());//空指针异常String str3="";System.out.println(str3.length());//0System.out.println(str3.isEmpty());//用于判断字符串是否为空 返回true或false

字符串比较

==比较

注意:

  • 对于内置类型,   ==比较的是变量中的
  • 对于引用类型,   ==比较的是引用中的地址

下面代码结果是true还是false?

        String str1="abcdef";String str2="abcdef";System.out.println(str1==str2);

答案是true,解释如下

只要是双引号引起来的字符串常量,会存在一个字符串常量池中。

存储逻辑:先检查内存(字符串常量池)中是否有这个字符串;如果没有,存进去;如果有,直接去现有对象的即可。

上面代码str1先存在了字符串常量池中,str2不会在生成一个对象了,而是直接指向str1同一个对象。

不同上一题,下面代码结果是true还是false?

        String str3=new String("abcd");String str4=new String("abcd");System.out.println(str3==str4);

结果是false

因为这里是强制产生了两个不同的对象,位于两个不同的空间,所以str3和str4是两个不同的字符串,结果是false

比较字符串的内容equals

System.out.println(str1.equals(str2));System.out.println(str3.equals(str4));

这里的结果两个都为true,equals比较的是两者的内容是否一致

忽略大小写比较equalsIgnoreCase

        System.out.println(str3.equalsIgnoreCase(str4));

比较字符串大小compareTo

  1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
  2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值
        String str1="abcde";String str2="edf";System.out.println(str1.compareTo(str2));

忽略大小写比较compareToIgnoreCase

        System.out.println(str1.compareToIgnoreCase(str2));

 获取字符串中某一个字符

        String str1="abcde";char ch=str1.charAt(2);System.out.println(ch);

通过字符获取下标indexOf

int index =str1.indexOf('d');
System.out.println(index);

从指定位置开始找

        int index =str1.indexOf('a',2);//从2位置开始找a

从后的指定位置开始找lastIndexOf

        String str3="ababcabcd";int index3=str3.lastIndexOf('a',4);System.out.println(index3);//2

转化

数值和字符串转化valueOf

        String s1=String.valueOf(1234);String s2=String.valueOf(12.34);String s3=String.valueOf(true);System.out.println(s1);System.out.println(s2);System.out.println(s3);

字符串转数值parseInt和parseDouble 

        int data1=Integer.parseInt("1234");//用类调用的方法,说明parseInt是静态方法double data2=Double.parseDouble("23.34");System.out.println(data1+6);System.out.println(data2+6);

 查看parseInt源码,他是被static修饰的

大小写转化toLowerCase和toUpperCase

        String str1="ABCD";//大写转小写String str2=str1.toLowerCase();//不是在原字符串本身进行修改(str1并没有改变,str2是产生的新的对象)System.out.println(str1);System.out.println(str2);String str3=str2.toUpperCase();//小写转大写System.out.println(str3);

 结果如图

 

将字符串转数组toCharArray

        String str1="ABCD";char[]array=str1.toCharArray();System.out.println(Arrays.toString(array));

结果如图

格式化format

String s=String.format("%d-%d-%d",2024,4,15);System.out.println(s);

字符串替换replace

有两种替换(replace的重载)

图中第一种是字符整体替换,第二种是字符串整体替换

        String str1="abcdab";String ret=str1.replace('a','z');String ret2=str1.replace("ab","yiyi");System.out.println(ret);System.out.println(ret2);

结果

替换字符串的第一个replaceFirst和整体替换replaceAll

        //替换字符串的第一个String ret3=str1.replaceFirst("ab","yiyi");System.out.println(ret3);//字符串的整体替换String ret4=str1.replaceAll("ab","ttttt");System.out.println(ret4);

结果

字符串拆分split

        //字符串拆分String s1="abc&tttt&hijk";String []str1=s1.split("&",2);//2表示最多分两组for (String s:str1) {System.out.println(s);}

结果

注意:

  1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" . 
  2. 而如果是 "\" ,那么就得写成 "\\\\" .
  3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.

 代码示例

        String s2="2024.4.15";String []str2=s2.split("\\.");String s3="abc&pppp*hhhh";String []str3=s3.split("&|\\*");//用|表示将&和*分开,有这两个分隔符,用\\表示转义*

多次拆分

//多次拆分String str="name=zhangsan&name=lisi";String[]strings=str.split("&");for (String s:strings) {String []ss=s.split("=");for (String x:ss) {System.out.println(x);}}

结果

字符串截取substring

        //字符串截取String s1="abcdrrrr";//从指定下标开始一直往下截取String s2=s1.substring(1);System.out.println(s2);//截取目标下标下的字符串String s3=s1.substring(2,5);//左闭右开[2,5)System.out.println(s3);

去掉字符串左右两边的空格trim

       String s1="    ab s c   d    f    ";System.out.println(s1);String s2=s1.trim();//去掉字符串左右两边的空格System.out.println(s2);

结果

字符串不可变性

字符串String类的源码中,value的值被final修饰,不能发生改变(value指向不能发生改变),但它指向的对象的内容是可以修改

又因为value被private封装了,源码中有没有get和set方法,使得字符串具有不可变性。

例如下面代码中数组array被final修饰

        final int[]array=new int[]{1,3,4};array=new int[]{1,3,6};//报错array[0]=99;//可以修改

所以字符串实际上是不能被修改的。

尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率 非常低下。

字符串拼接

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大 部分功能是相同的。以下演示StringBuilder

StringBuilde用于在原字符串上拼接字符串

        StringBuilder stringBuilder=new StringBuilder("abcd");stringBuilder.append("yyyyyyy");

结果

String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可 以修改。频繁修改字符串的情况考虑使用StringBuilder。

String、StringBuffer、StringBuilder的区别

  • String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
  • StringBuffer与StringBuilder大部分功能是相似的
  • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操 作。

相关文章:

【JavaSE】搞定String类

前言 本篇会细致讲解String类的常见用法,让小伙伴们搞定String类~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 常用的三种字符串构造 字符串长度length 字符串比较 比较 比较字符串的内容equals…...

数字乡村创新实践探索农业现代化与农村治理现代化新路径:科技赋能农村全面振兴与农民幸福生活

目录 引言 一、数字乡村与农业现代化 1、智慧农业技术的应用 2、农业产业链的数字化转型 二、数字乡村与农村治理现代化 1、农村信息化水平的提升 2、农村治理模式的创新 三、科技赋能农村全面振兴与农民幸福生活 1、提升农业生产效益与农民收入 2、促进农村产业结构…...

【从零开始手搓12306项目】四、12306是如何成为全球最忙碌的网站之一?

4.1 12306有多忙碌 一天的请求量大概1600亿,平均180万/秒(二八理论:20%的事件产生80%的请求),不适合二八理论,因为12306分时间放票 平均一年售出30亿张,高峰期日售票能力达到了2000万张 高峰期…...

WebKit简介及工作流程

文章目录 一、WebKit简介二、WebKit结构三、Webkit工作流程四、WebKit常见问题五、WebKit优点六、相关链接 一、WebKit简介 WebKit是一个开源的浏览器引擎,它的起源可以追溯到2001年,当时苹果公司推出了其首款基于Unix的操作系统Mac OS X。在2002年&…...

软考-系统集成项目管理中级--进度管理(输入输出很重要!!!本章占分较高,着重复习)

本章历年考题分值统计(16年11月及以后按新教材考的) 本章重点常考知识点汇总清单(学握部分可直接理解记忆) 12、参数估算:参数估算是一种基于历史数据和项目参数,使用某种算法来计算成本或持续时间的估算技术。参数估算是指利用历史数据之间的统计关系和…...

AndroidAutomotive模块介绍(一)整体介绍

前言 Android Automotive 是一个基本 Android 平台,可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。 本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务&#x…...

【开发问题记录】Nacos修改服务实例权重时报错

问题记录 一、问题描述1.1 产生原因1.2 产生问题 二、问题解决2.1 docker部署的nacos解决方案2.1.1 进入nacos容器2.1.2 查看当前目录2.1.3 进入data文件夹2.1.4 删除protocol文件2.2 本地部署的nacos 一、问题描述 1.1 产生原因 在运行项目时,在本地启动了一个服务…...

高级IO和5种IO模型

目录 1. 高级IO1.1 IO的基本概念1.2 OS如何得知外设当中有数据可读取1.3 OS如何处理从网卡中读取到的数据包1.4 IO的步骤 2. 五种IO模型2.1 利用钓鱼来理解2.2 阻塞IO2.3 非阻塞IO2.4 信号驱动IO2.5 IO多路转接2.6 异步IO 3. 高级IO的概念3.1 同步通信 VS 异步通信3.2 阻塞 VS …...

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

7.1实验效果 Hispark WiFi开发套件又提供一个oled屏幕,但是鸿蒙源码中没有这个屏幕的驱动,我们需要自己去移植。 以下是移植效果: 接口:I2C 使用引脚:HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14 7.2代码 这里我直…...

C#:循环中断

任务描述 实现九九乘法表,按照编程要求,使用break跳出循环 测试说明 测试过程: 平台将编译用户补全代码,并根据程序的输出判断程序是否正确。 以下是测试样例: 测试输入: 预期输出: we found…...

34. UE5 RPG实现鼠标点击移动

在前面,我们实现过使用键盘按键wasd去实现控制角色的移动,现在,我们实现了InputAction按键触发,后面,实现一下通过鼠标点击地面实现角色移动。 我们将实现两种效果的切换,如果你点击地面快速松开&#xff0…...

《二》Qt Creator工具介绍与使用

一、关于界面 点击文件--->新建文件或项目会出现如下图: 我们选择第一个 点击下一步下一步: 继续下一步直到结束: 二,具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库,如果以后…...

20240415金融读报:市场信贷不能过于宽松声音碳领域新增文件

1、市场普遍认为,在经济转型背景下,当前的社会融资规模和信贷增长有助于经济高质量发展,过于宽松并不利于经济发展。(已经有这个声音了,是不是说明我们已经脱离了U型曲线的最低点,在或快接近其后半段的1/2处…...

2024年第十五届蓝桥杯研究生组题目总结(Java、Python、C++)

2024年十五届蓝桥杯研究生组 今年的题较去年难度降低了很多,题量也少了2道。 Q1 劲舞团 读文件,找到最长的满足条件的子数组的长度 答案是:9 BufferedReader,fopen,open Q2 召唤数学精灵 找规律,周期…...

MindOpt APL向量化建模语法的介绍与应用(2)

前言 在数据科学、工程优化和其他科学计算领域中,向量和矩阵的运算是核心组成部分。MAPL作为一种数学规划语言,为这些领域的专业人员提供了强大的工具,通过向量式和矩阵式变量声明以及丰富的内置数学运算支持,大大简化了数学建模…...

深入理解图形处理器(GPU):加速人工智能和大数据计算的引擎

文章目录 1. 什么是GPU?2. GPU的工作原理3. GPU的应用领域4. GPU与CPU的比较参考与推荐 前言: 图形处理器(GPU)不再仅仅是用于图形渲染的硬件设备。如今,GPU已经成为加速人工智能、大数据计算和科学研究的关键引擎。本…...

【Java探索之旅】数组使用 初探JVM内存布局

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、数组的使用1.1 元素访问1.2 数组遍历 二、JVM的内存布局🌤️全篇总结 …...

RabbitMQ消息模型之Simple消息模型

simple消息模型 生产者 package com.example.demo02.mq.simple;import com.example.demo02.mq.util.ConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;import java.io.IOException;/*** author Allen* 4/10/2024 8:07 PM* versi…...

设计模式系列:简单工厂模式

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS二次开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 定义 特点 使用场景 优缺点 (1) 优点…...

解决 windows+Ubuntu 时间不同步问题

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 如果你的电脑装了 Windows Ubuntu 系统,肯定会遇到时间不同步的问题。那么如何解决呢?参考步骤如下: # 步骤一:进入到 Ubuntu 系统# 步骤二:执行如下三条命令即可 sud…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

C++ 基础特性深度解析

目录 引言 一、命名空间(namespace) C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用(reference)​ C 中的引用​ 与 C 语言的对比​ 四、inline(内联函数…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...