Java——String类

news2025/1/21 22:09:25

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方法,所以外界就不能对其修改

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

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

相关文章

【头歌】JSP入门、基于MVC模式的用户登录、JSP基础之网站用户管理

目录 JSP入门 第1关&#xff1a;搭建你的第一个Web服务器 第3关&#xff1a;JSP基础测试题&#xff08;一&#xff09; 第4关&#xff1a;JSP基础&#xff08;二&#xff09; 第5关&#xff1a;JSP基础测试题&#xff08;二&#xff09; 基于MVC模式的用户登录 第1关&…

Gbase 国产数据库

参考&#xff1a;参考&#xff1a; 5分钟学会Linux环境GBase 8t安装和部署 - 光洋山 - twt企业IT交流平台 (talkwithtrend.com)https://www.talkwithtrend.com/Article/197237 视频 GBase 8s快速入门-功能简介与演示-大数据教程-腾讯课堂 (qq.com)https://ke.qq.com/course/…

【数据结构】二叉树运用及相关例题

文章目录 前言查第K层的节点个数判断该二叉树是否为完全二叉树例题一 - Leetcode - 226反转二叉树例题一 - Leetcode - 110平衡二叉树 前言 在笔者的前几篇篇博客中介绍了二叉树的基本概念及基本实现方法&#xff0c;有兴趣的朋友自己移步看看。 这篇文章主要介绍一下二叉树的…

C# PaddleOCR 单字识别效果

C# PaddleOCR 单字识别效果 效果 说明 根据《百度办公文档识别C离线SDKV1.2用户接入文档.pdf》&#xff0c;使用C封装DLL&#xff0c;C#调用。 背景 为使客户、第三方开发者等能够更快速、方便的接入使用百度办公文档识别 SDK、促进百度 OCR产品赋能更多客户&#xff0c;特设…

Linux开发工具(个人使用)

Linux开发工具 1.Linux yum软件包管理器1.1Linux安装程序有三种方式1.2注意事项1.3如何查看&#xff0c;安装&#xff0c;卸载软件包1.3.1查看软件包1.3.2安装软件包1.3.3卸载软件 2.Linux vim编辑器2.1vim的基本操作2.2vim正常模式命令集2.3vim底行模式命令集2.4vim配置 3.Lin…

灾备方案中虚拟化平台元数据备份技术应用

首先需要介绍下元数据是什么&#xff1f; 元数据&#xff08;Metadata&#xff09;是一个重要的概念&#xff0c;它描述了数据的数据&#xff0c;也就是说&#xff0c;元数据提供了关于数据属性的信息。这些属性可能包括数据的存储位置、历史数据、资源查找、文件记录等。 元…

【MySQL访问】

文章目录 一、C远程连接到MySQLmysql_init()函数mysql_real_connect&#xff08;&#xff09;函数实战案例 二、处理查询select的细节mysql_store_result()函数获取结果行和列获取select结果获取行内容获取列属性 三、MySQL图形化界面连接 关于动态链接&#xff0c;请看这篇文章…

ARM32开发——第一盏灯

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 开发流程需求分析项目新建代码编写GPIO初始化 程序编译程序烧录烧录扩展&#xff08;熟悉&#xff09;官方烧录器烧录&#xff08;…

C++入门——类和对象【3】(6)

前言 本节是C类和对象中的最后一节&#xff0c;学完本节内容并且能够掌握之前所学的所有内容的话&#xff0c;C就可以说是入门了&#xff0c;那我们废话不多说&#xff0c;正式进入今天的学习 1. 再谈构造函数 1.1 引入 我们在栈的背景下来看 栈的代码&#xff1a; ​type…

数据结构的快速排序(c语言版)

一.快速排序的概念 1.快排的基本概念 快速排序是一种常用的排序算法,它是基于分治策略的一种高效排序算法。它的基本思想如下: 从数列中挑出一个元素作为基准(pivot)。将所有小于基准值的元素放在基准前面,所有大于基准值的元素放在基准后面。这个过程称为分区(partition)操作…

开发语言Java+前端框架Vue+后端框架SpringBoot开发的ADR药物不良反应监测系统源码 系统有哪些优势?

开发语言Java前端框架Vue后端框架SpringBoot开发的ADR药物不良反应监测系统源码 系统有哪些优势&#xff1f; ADR药物不良反应监测系统具有多个显著的优势&#xff0c;这些优势主要体现在以下几个方面&#xff1a; 一、提高监测效率与准确性&#xff1a; 通过自动化的数据收集…

Linux自动挂载服务autofs讲解

1.产生原因 2.配置文件讲解 总结&#xff1a;配置客户端&#xff0c;先构思好要挂载的目录如&#xff1a;/abc/cb 然后在autofs.master中编辑&#xff1a; /abc&#xff08;要挂载的主目录&#xff09; /etc/qwe&#xff08;在这个文件里去找要挂载的副目录&#xff0c;这个名…

Codeforces Round 949 (Div. 2) (A~C)

1981A - Turtle and Piggy Are Playing a Game 贪心&#xff0c;每次取x 2&#xff0c;求最大分数 // Problem: B. Turtle and an Infinite Sequence // Contest: Codeforces - Codeforces Round 949 (Div. 2) // URL: https://codeforces.com/contest/1981/problem/B // Me…

Java项目对接redis,客户端是选Redisson、Lettuce还是Jedis?

JAVA项目对接redis&#xff0c;客户端是选Redisson、Lettuce还是Jedis&#xff1f; 一、客户端简介1. Jedis介绍2. Lettuce介绍3. Redisson介绍 二、横向对比三、选型说明 在实际的项目开发中&#xff0c;对于一个需要对接Redis的项目来说&#xff0c;就面临着选择合适的Redis客…

G4 - 可控手势生成 CGAN

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 代码总结与心得 代码 关于CGAN的原理上节已经讲过&#xff0c;这次主要是编写代码加载上节训练后的模型来进行指定条件的生成 图像的生成其实只需要使用…

unity2020打包webGL时卡进程问题

我使用的2020.3.0f1c1&#xff0c;打包发布WEB版的时候会一直卡到asm2wasm.exe这个进程里&#xff0c;而且CPU占用率90%以上。 即使是打包一个新建项目的空场景也是同样的问题&#xff0c;我尝试过一直卡在这里会如何&#xff0c;结果还真打包成功了。只是打包一个空场景需要20…

下载HF AutoTrain 模型的配置文件

下载HF AutoTrain 模型的配置文件 一.在huggingface上创建AutoTrain项目二.通过HF用户名和autotrain项目名,拼接以下url,下载模型列表(json格式)到指定目录三.解析上面的json文件、去重、批量下载模型配置文件(权重以外的文件) 一.在huggingface上创建AutoTrain项目 二.通过HF用…

微信公众号【原子与分子模拟】: 熔化温度 + 超导电性 + 电子化合物 + 分子动力学模拟 + 第一性原理计算 + 数据处理程序

往期内容主要涵盖&#xff1a; 熔化温度 超导电性 电子化合物 分子动力学模拟 第一性原理计算 数据处理程序 【1】熔化温度 分子动力学 LAMMPS 相关内容 【文献分享】分子动力学模拟 LAMMPS 熔化温度 晶体缺陷 熔化方法 LAMMPS 文献&#xff1a;金属熔化行为的局域…

Mac安装第三方软件的命令安装方式

场景&#xff1a; 打开终端命令行&#xff0c;sudo xattr -rd com.apple.quarantine&#xff0c;注意最后quarantine 后面加一个空格&#xff01;然后打开Finder&#xff08;访达&#xff09;&#xff0c;点击左侧的 应用程序&#xff0c;找到相关应用&#xff0c;拖进终端qua…