Java——String类

1.String常用方法

1.1三种常用构造方法

1.        String s1="hello";

2.        String s2=new String("world");

3.      char []str={'h','e','l','l','o',' ','w','o','r','l','d'};
        String s3=new String(str);

1.2String对象的比较

==比较

对于内置类型来说,“==”比较的是两端变量存储的值是否相同

对于引用类型来说,“==”比较的是两端变量指向的地址值是否相同

对于内置类型来说,存储的内容在栈区

对于引用类型来说,存储的内容在堆区,而栈区存储的是堆区对象的地址

这样一来“==”就是比较的是栈区的内容


equals比较

在String类当中,重写了Object类中的equals方法,Object类中的equals方法默认是使用==进行比较的,返回值为boolean类型

equals方法的使用格式:

对象1.equals(对象2)

String类中equals方法的比较规则

1.判断对象1和对象2是否为同一对象,是就返回true

2.判断对象2是否为String类型的对象,是就继续比较,不是就返回false

3.获取对象1和对象2的长度,相同就继续比较,否则返回false

4.按字典序进行比较,从前往后挨个比较


compareTo比较

与equals不同的是,compareTo的返回值是int类型

对象1.compareTo(对象2)

String类中compareTo的比较规则:

从前往后依次比较,遇见不同返回对象1与对象2对应字符的差值,如果对象1比较完了,返回两个字符串相差的字符数,如果对象2比较完了,则返回两者字符串相差的字符数的相反数


compareToIgnoreCase比较

与compareTo的比较方式相同,但是忽略了大小写

1.3字符串查找

char charAt(int index)

index为需要查找的字符串的下标,返回该下标的字符,如果越界访问,则抛出IndexOutOfBoundsException异常


indexOf

indexOf提供了多种重载方法

indexOf是查找某个字符或字符串从0下标或从指定下标开始,返回第一次出现位置的下标


lastIndexOf

lastIndex与index的重载参数列表和返回值完全相同

lastIndexOf是从后往前查,返回目标值第一次出现的下标

1.4转化

1.4.1各种数据类型转换为字符串

valueOf

字符串转数字(parse和valueOf)

        int a=Integer.valueOf("10");
        System.out.println(a);
        int a1=Integer.parseInt("100");
        System.out.println(a1);
        double b=Double.valueOf("11.21");
        System.out.println(b);
        double b1=Double.parseDouble("112.12");
        System.out.println(b1);

1.4.2大小写转换

转小写:toLowerCase

转大写:toUpperCase

        String str1="Hello";
        String str2="World";
        System.out.println(str1.toLowerCase());//大写转小写
        System.out.println(str2.toUpperCase());//小写转大写

1.4.3字符串转数组

toCharArray

        String str1="Hello";
char []str0= str1.toCharArray();

1.5格式化

format

System.out.println(String.format("%d年%d月%d日",2024,5,30));

1.6字符串的替换

替换所有:replaceAll

替换首个:replacFirst

String str6="hhhhashaadhahhasshhh";
String str7="AAAAAAAAAAAdasadsdd";
        str6.replaceAll("h","H");//将str6中的所有“h”替换为“H”
        str7.replaceFirst("AA","EE");//将str7中的首个“AA”替换为“EE”

1.7字符串分割

分割:split

   String str8="HHH0AAA0SSS0DDD0FFF";
        String[]ss1=str8.split("0");
        for (int i = 0; i < ss1.length ; i++) {
            System.out.println(ss1[i]);
        }

部分分割:split的第二个参数为分割几段

 String str8="HHH0AAA0SSS0DDD0FFF";
        String[]ss1=str8.split("0",2);
        for (int i = 0; i < ss1.length ; i++) {
            System.out.println(ss1[i]);
        }

注意事项:

1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .

2. 而如果是 "\" ,那么就得写成 "\\\\" .

3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

  String str8="HHH0AAA0SSKS0DDKD0FFF";
        String[]ss1=str8.split("0|K");
        for (int i = 0; i < ss1.length ; i++) {
            System.out.println(i+ss1[i]);
        }

1.8字符串的截取

字符串截取:substring

String str9="hello world";
        System.out.println(str9.substring(4));//截取从4下标开始后的字符串
        System.out.println(str9.substring(3,5));//截取从3下标开始,5下标结束的字符串,左闭右开

1.9去除字符串左右两端的空格

String str10="         weq weq eda eqew            ";
        System.out.println(str10.trim());

2.字符串的修改

注意:要尽量避免对String类型的对象进行修改,因为String类型的对象时不能修改的,所有Sting类型对象修改的结果都是需要创建新的String对象,这样效率是非常低下的

    public static void main(String[] args) {
        long start = System.currentTimeMillis();//获取当前时间戳,单位(毫秒)
        String s = "";
        for(int i = 0; i < 10000; ++i){
            s += i;
  }
 long end = System.currentTimeMillis();
 System.out.println(end - start);//运行的时间差
 start = System.currentTimeMillis();
 StringBuffer sbf = new StringBuffer("");
 for(int i = 0; i < 10000; ++i){
 sbf.append(i);
 }
 end = System.currentTimeMillis();
 System.out.println(end - start);
 start = System.currentTimeMillis();
 StringBuilder sbd = new StringBuilder();
 for(int i = 0; i < 10000; ++i){
 sbd.append(i);
 }
 end = System.currentTimeMillis();
 System.out.println(end - start);
    }

如果要频繁修改字符串的值,建议调用StringBuilder中的append方法,这个方法在使用时不会创建新的String类型对象

补充:字符串的不可变性

因为String类型的对象是不可被修改的,什么原因呢?


String类是被final修饰的

在String类里字符串是被byte类型的数组存储的

这个数组被final和private修饰

public final class String{
private final byte[] value;
}

final修饰的类是不可被继承的

final修饰的数组表示value这个变量指向的地址不能被修改,而地址指向的字符元素是可被修改的

字符串不可变性的真正原因是被private修饰,被private修饰的变量只能在本类中使用,而String里没有getter和setter方法,所以外界就不能对其修改

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Unity中配置Android项目以允许HTTP流量,解决AVPro在Android平台中无法播放http视频

解决方法快速通道&#xff1a;拉到底&#xff0c;看倒数第二张图 好记性不如烂笔头 最近在使用AVpro插件播放http视频&#xff0c;在Editor中一切正常&#xff0c;然而打包在Android平台下就播放不了 AVPro在Unity中的警告&#xff1a; 感觉只是个警告&#xff0c;没引起注意…

嵌入式人工智能开发:基于TensorFlow Lite和OpenCV的实时姿态估计算法实现

文章目录 引言环境准备人工智能在嵌入式系统中的应用场景代码示例常见问题及解决方案结论 1. 引言 在嵌入式系统中集成人工智能&#xff08;AI&#xff09;技术已经成为一种重要的发展方向。实时姿态估计是AI在嵌入式领域的一个高级应用&#xff0c;能够在资源受限的环境中实…

关于12306技术相关说明以及暂定计划

12306 项目中包含了缓存、消息队列、分库分表、设计模式等代码&#xff0c;通过这些代码可以全面了解分布式系统的核心知识点。 在系统设计中&#xff0c;采用最新 JDK17 SpringBoot3&SpringCloud 微服务架构&#xff0c;构建高并发、大数据量下仍然能提供高效可靠的 1230…

【机器学习】集成语音与大型语音模型等安全边界探索

探索集成语音与大型语言模型&#xff08;SLMs&#xff09;的安全边界 一、引言二、SLMs的潜在安全风险三、对抗性攻击与越狱实验四、提高SLMs安全性的对策五、总结与展望 一、引言 近年来&#xff0c;随着人工智能技术的飞速发展&#xff0c;集成语音与大型语言模型&#xff08…

攻防实战 | 邮件高级威胁检测与自动化响应

历经三个月的时间&#xff0c;年度重磅直播节目Fortinet 2024年度“Demo季”近日终于迎来了备受瞩目的压轴大戏——Demo Day第三期&#xff0c;主题为《新邮件安全下的高级威胁检测与自动化响应》。继成功举办了前两期《企业网络中的多源威胁情报自动化整合与集成》和《应急响应…

QWidget成员函数功能和使用详细说明(二)(文字+用例+代码+效果图)

文章目录 1.测试工程配置2.成员函数2.1 void setFixedHeight(int h)2.2 void setFixedSize(const QSize &s)2.3 void setFixedSize(int w, int h)2.4 void setFixedWidth(int w)2.5 void setFocus(Qt::FocusReason reason)2.6 void setFocusPolicy(Qt::FocusPolicy policy)…

高级Web Lab2

高级Web Lab2 12 1 按照“Lab 2 基础学习文档”文档完成实验步骤 实验截图&#xff1a; 2 添加了Web3D场景选择按钮&#xff0c;可以选择目标课程或者学习房间。

【计算机毕业设计】谷物识别系统Python+人工智能深度学习+TensorFlow+卷积算法网络模型+图像识别

谷物识别系统&#xff0c;本系统使用Python作为主要编程语言&#xff0c;通过TensorFlow搭建ResNet50卷积神经算法网络模型&#xff0c;通过对11种谷物图片数据集&#xff08;‘大米’, ‘小米’, ‘燕麦’, ‘玉米渣’, ‘红豆’, ‘绿豆’, ‘花生仁’, ‘荞麦’, ‘黄豆’, …

USART串口数据包

USART串口数据包 先来看两张图&#xff0c;本次程序是串口收发HEX数据包&#xff0c;第二种是串口收发文本数据包&#xff0c;之后两个图&#xff0c;展示的就是接收数据包的思路。 在PB1这里接了一个按键&#xff0c;用于控制。在串口助手&#xff0c;在发送模式和接收模式都…

Satellite Stereo Pipeline学习

1.在Anaconda某个环境中安装s2p pip install s2p 2.在Ubuntu系统中安装s2p源代码 git clone https://github.com/centreborelli/s2p.git --recursive cd s2p pip install -e ".[test]" 3.在s2p中进行make all处理 中间会有很多情况&#xff0c;基本上哪个包出问题…

基于昇腾910B训练万亿参数的语言模型简介

基于昇腾910B训练万亿参数的语言模型 Abstract 在本工作中&#xff0c;作者开发了一个系统&#xff0c;该系统在Ascend 910 AI处理器集群和MindSpore框架上训练了一个万亿参数的语言模型&#xff0c;并提出了一个含有1.085T参数的语言模型&#xff0c;名为PanGu-。 从PanGu-[…

Java18+​App端采用uniapp+开发工具 idea hbuilder智能上门家政系统源码,一站式家政服务平台开发 家政服务(师傅端)介绍

Java18​App端采用uniapp开发工具 idea hbuilder智能上门家政系统源码&#xff0c;一站式家政服务平台开发 家政服务&#xff08;师傅端&#xff09;介绍 家政服务师傅端是一个专为家政服务人员设计的平台&#xff0c;该平台旨在提供便捷、高效的工作机会&#xff0c;同时确保…

社交媒体数据恢复:QQ空间

本教程将指导您如何恢复QQ空间中的说说、日志和照片等内容。请注意&#xff0c;本教程不涉及推荐任何数据恢复软件。 一、恢复QQ空间说说 登录您的QQ账号&#xff0c;并进入QQ空间。点击“日志”选项&#xff0c;进入空间日志页面。在空间日志页面&#xff0c;您会看到一个“…

报表工具DataEase技术方案(一)

一、使用场景&#xff1a; 企业内部系统想要快速接入报表功能&#xff0c;但是局限于人力资源不足&#xff0c;不想沿用传统的前端后端开发模式&#xff0c;可以尝试使用开源报表工具 DataEase。 二、架构设计&#xff1a; 使用最简便的报表集成方式&#xff0c;通过DataEase…

区块链合约开发流程

区块链合约开发&#xff0c;尤其是以太坊智能合约开发&#xff0c;是一个多步骤的过程&#xff0c;从需求分析到部署和维护&#xff0c;每一步都需要仔细规划和执行。以下是详细的开发流程。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合…

CANDela studio新建和编辑服务

服务定义和编辑只能够在CDDT里面进行&#xff0c;思路分为三步&#xff1a; 1、Protocol Services里面添加服务&#xff0c;定义服务的格式、请求和正负响应。 2、根据服务的功能归类到Diagnostic Class Tenplates 3、Variant里面的Supported Diagnostic Classes勾选 然后我…

汽车IVI中控开发入门及进阶(二十四):杰发科技AC8015

前言: 在此之前的大部分时间,四维图新更多的是以图商的身份在业内出现,但现在四维图新图商之外的技术积累提现在了杰发科技身上,或者是从图商到汽车智能化一体解决方案供应商的角色转变。汽车智能化,可以简单的归为座舱智能化和智能驾驶两个板块。 随着汽车变得越来越智能…

AMS 仿真 ERROR

ERROR (OSSHNL-514): Netlist generation failed because of the errors reported above. The netlist might not have been generated at all, or the generated netlist could be corrupt. Fix the reported errors and regenerate the netlist. 原因&#xff1a;用的incisi…

Facebook开户|Facebook广告投放指南

家人们中午好~今天的文章由我们帅气逼人的大帅哥Zoey为大家分享&#xff08;狗头&#xff09;~有想要通过Facebook广告掘金的家人们&#xff01;今天就跟大家分享一下Facebook广告投放的底层逻辑和实用技巧&#xff0c;帮助大家少走弯路&#xff0c;快速入门~ 基础知识&#x…

mysql的增删查改(进阶)

目录 一. 更复杂的新增 二. 查询 2.1 聚合查询 COUNT SUM AVG MAX MIN 2.1.2 分组查询 group by 子句 2.1.3 HAVING 2.2 联合查询/多表查询 2.2.1 内连接 2.2.2 外连接 2.2.3 全外连接 2.2.4 自连接 2.2.5 子查询 2.2.6 合并查询 一. 更复杂的新增 将从表名查询到…