String类知识

news2024/11/24 20:43:08

目录

一、String存在意义

二、字符串为何不可变

三、String类常用方法

        1、字符串构造

        2、String对象的比较

        3、字符串查找

        4、转化

        (1)数值和字符转化

        (2)大小写转换

        (3)字符串转数组

        (4)格式化

        5、字符串替换

        6、字符串拆分

        7、字符串截取

        8、字符串修改

        9、其他操作方法

四、StringBuilder和StringBuffer的使用和方法介绍

五、StringBuilder和StringBuffer的不同


一、String存在意义

        在c语言中我们以及接触到了字符串,但是表示字符串的方式只能是使用字符数组或者是字符指针,而Java面向对象很多时候离不开字符串,为了更好的实现面向对象的思想,Java提供了String类,这就是String类存在的意义

二、字符串为何不可变

        我们去写一个String类的时候,我们发现String类里面的内容不能直接被修改,为什么不能修改呢,我们先打开一下String类里面的构造:

         第一个final是不能被继承我们理解,那么第二个为啥不是字符串被修改的主要原因呢,上代码:

  public static void main(String[] args) {
        final char[] str={'1','2','3'};
        str[0]='4';
        System.out.println(str);
    }

        打印出来的结果是:

        为何会这样呢?主要得益于final修饰的一般是地址不能变,而修改数组里面的东西,地址是不会变化的,所以就算被fianl修饰,char[]里面的内容还是可以被修改。 而private私有化封装才是字符串不能被修改的本质原因。

三、String类常用方法

        1、字符串构造

         对于字符串的构造,常用的就三种构造方法——常量串构造,使用newString对象构造,使用字符数组构造,用代码来写如下:

 public static void main(String[] args) {
        //使用常量串构造
        String s1="wqe";
        //使用newString对象
        String s2=new String("wqer");
        //使用字符数组进行构造
        char[] str={'w','q','e'};
        String s3=new String(s2);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
    }

        打印结果如下:

        String类还提供了很多中字符串构造方法,而常用的就这三种

        2、String对象的比较

        一共有三种比较,第一种是==,第二种是equals方法比较,第三种是compareTo方法比较;

        对于==符号比较,比较的就是地址,equals方法比较的是里面的值是否相等,而且还是boolean类型,而compareTo方法是按顺序比较里面的字符串,相等则继续比较下一个,不相等则返回差值,值得注意的是,compareTo方法是按照ASC码里面的值进行比较,而对于相同的长度的字符串,返回-1或者1(根据前后俩个字符串哪个更长,前者减去后者)。  


public static void main(String[] args) {
        String q1="abc";
        String q2="abcA";
        String q3="abZ";
        String q4="abc";
        String q5=q1;
        //==比较地址
        System.out.println(q1 == q5);
        System.out.println(q1 == q3);
        System.out.println(q1 == q2);
        System.out.println("===========");
        //equals方法比较值
        System.out.println(q1.equals(q5));
        System.out.println(q1.equals(q3));
        System.out.println(q1.equals(q2));
        //compareTo桉顺序比较,不同返回差值,如果字符串长度不一样,而返回-1或者1
        System.out.println("===========");
        System.out.println(q1.compareTo(q4));
        System.out.println(q2.compareTo(q1));
        System.out.println(q1.compareTo(q3));
}

        而打印出来的结果是:

         总的来说,String类的比较方式还是挺常用的,可以根据自己需要去做出不同的比较方式。

        3、字符串查找

        字符串查找也是字符串中非常常见的操作,String类提供的常用查找的方法,如下图:

        

方法功能
char charAt(int index)返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException
int indexOf(int ch)返回ch第一次出现的位置,没有返回-1
int index(int ch,int fromIndex)从fromindex位置开始找ch第一次出现的位置,没有返回-1
int indexOf(String str)返回str第一次出现的位置,没有返回-1
'int indexOf(String str,int fromIndex)从fromIndex位置开始找str第一次出现的位置,没有返回-1
int lastIndexOf(int ch)从后往前找,返回ch第一次出现的位置,没有返回-1
int lastIndexOf(int ch,int fromIndex)从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1
int lastIndexOf(String str)从后往前找,返回str第一次出现的位置,没有返回-1
int lastIndexOf(String str,int fromIndex)从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1

        

 public static void main(String[] args) {
        String s="abcabcabcqwertyuiopz";
        System.out.println(s.charAt(3));//a
        System.out.println(s.indexOf('a'));//0
        System.out.println(s.indexOf('a', 3));//3
        System.out.println(s.indexOf("cab"));//2
        System.out.println(s.indexOf("cab", 5));//5
        System.out.println(s.lastIndexOf(3));//-1(没有找到)
        System.out.println(s.lastIndexOf("a", 10));//6
        System.out.println(s.lastIndexOf("cabc"));//5
        System.out.println(s.lastIndexOf("cabc",7));//5
    }

        主要查找的方法就是这些,索引,向前往后查找和从后往前查找,查找字符串或者字符,第二个参数就是从第几个开始查找。

        4、转化

        (1)数值和字符转化

        数值和字符转化可以分为数值转化为字符串,也可以是字符串转化为数值,以代码为例:

        

  public static void main(String[] args) {
        //数字转字符串(通过String.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);
        System.out.println("============");
        int data1=Integer.parseInt("1234");
        int data2=Integer.parseInt("12534");
        System.out.println(data1);
        System.out.println(data2);
    }

        打印结果如下:

        .value()是转换为字符串的用法,而包装类.转换类型()是字符串转换为数值的方法。

        (2)大小写转换

        大小写转化主要用到了toUpperCasetoLowerCase的方法,toUpperCase()是将小写转换为大写的方法,toLowerCase()是将大写转换为小写的方法,如下:

        

 public static void main(String[] args) {
        String q1="qwe";
        String q2="QWE";
        System.out.println(q1.toUpperCase());
        System.out.println(q1.toLowerCase());
    }

        打印结果为:

 

        (3)字符串转数组

        字符串转为数组使用到toCharArray()方法,,然后数组转换为字符串也可以用到new String()方法,代码如下:

        

 public static void main(String[] args) {
        String w1="qwerty";
        //字符串转数组
        char[] ch= w1.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.println(ch[i]);
        }
        System.out.println();
        //数组转字符串
        String s2=new String(ch);
        System.out.println(s2);
    }

        打印结果如下:

        (4)格式化

        格式化方法用到format方法,代码如下:

        

  public static void main(String[] args) {
        String e1=String.format("%d-%d-%d",2019,9,14);
        System.out.println(e1);
    }

         

        格式化主要是按照里面的格式打印,对于设置日期这些有很大帮助。

四、StringBuilder和StringBuffer的使用和方法介绍

        StringBuilder和StringBuffer的使用需要创建对象,不像String类那样可以直接String s="q",

需要new一个对象,代码如下:

 public static void main(String[] args) {
        //StringBuffer sbd="qwe";//会报错
        StringBuilder sbd=new StringBuilder("wqwq");
        StringBuffer sbf=new StringBuffer("asd");

        System.out.println(sbd);
        System.out.println(sbf);
    }

        打印出来结果是:

        

        那么它们有什么不同呢?方法上有很大不同,我列出一个表格:

方法说明
StringBuff append(String str)在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、double、float、int、long、Object、String、StringBuff的变量
char charAt(int index)获取index位置的字符
int length()获取字符串的长度
int capacity()获取底层保存字符串空间总的大小
void ensureCapacity(int mininmumCapacity)扩容
void setCharAt(int index,char ch)将index位置的字符设置为ch
int indexOf(String str)返回str第一次出现的位置
int indexOf(String str,int fromIndex)从fromIndex位置开始查找str第一次出现的位置
int lastIndexOf(String str)返回最后一次出现str的位置
int lastIndexOf(String str,int fromIndex)从fromIndex位置开始找str最后一次出现的位置
StringBuffer insert(int offset,String str)

在offset位置插入:八种基本类型&String类型&

Object类型数据

StringBufferdeleteCharAt(int index)删除index位置字符
StringBuffer delete(int start, int end)删除[start,end)区间内的字符
 StringBuffer replace(int start, int end, String str)将[start,end)位置的字符替换为str
tring substring(int start)从start开始一直到末尾的字符以String的方式返回
String substring(int start, int end)将[start,end)将[start,end)范围内的字符以String的方式返回
StringBuffer reverse()反转字符串
ring toString()将所有字符按照String的方式返回

五、StringBuilder和StringBuffer的不同

        StringBuilder更适合于单线程,StringBuffer更适合多线程,为什么呢,我们打开这俩个的里面内容来看:

        这个是StringBuffer的,它的里面有锁,更适合多线程,而StringBuilder里面是没有锁的,更适合单线程,但速度更快。

 

 

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

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

相关文章

不同类型红酒的保存期限与品质变化

云仓酒庄雷盛红酒&#xff0c;以其多样的品种和与众不同的风味吸引了无数葡萄酒爱好者。然而&#xff0c;不同类型和风格的红酒在保存过程中&#xff0c;其期限和品质变化也各不相同。本文将深入探讨这个问题&#xff0c;以帮助消费者更好地理解和欣赏云仓酒庄雷盛红酒的多样性…

智慧互联网医院系统开发指南:从源码到在线问诊APP

近期&#xff0c;互联网医院系统的热度非常高&#xff0c;很多人跟小编提问如何开发&#xff0c;今天小编将从零开始为大家详解互联网医院系统源码&#xff0c;以及在线问诊APP开发技术。 一、需求分析与系统设计 1.1 需求分析 用户管理 预约挂号 在线问诊 电子病历 药品…

0606 作业

#include <stdio.h> #include <string.h>typedef struct usr{char unm[21];char pwd[21]; }user;int main(int argc, const char *argv[]) {FILE* userfilefopen("./user_tible.txt","r");printf("输入username:");user u;scanf(&qu…

主流的单片机语言是 C 吗?是的话为啥不是 C++?

是c&#xff0c;而且可以预见在很长很长一段时间&#xff0c;没有巨大变革的情况下都会是c 商业项目开发光讨论语言特性优劣问题&#xff0c;是非常片面的&#xff0c;所以要看待为什么是c&#xff0c;最主要仍然是从收益和成本上来看。 刚好我有一些资料&#xff0c;是我根据…

【postgresql初级使用】初识触发器,在数据行发生变化时自动执行用户行为,也可以SQL级别触发,特别是视图上可以有触发器了

初识触发器 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 初识触发器概…

深入解析手机信息恢复,2个技巧,做数据安全守护者

在现代社会&#xff0c;手机就像我们的第六感一样&#xff0c;随时能够帮助我们搞定难题。但是&#xff0c;有时候手机也会闹个小脾气&#xff0c;比如误删信息、系统崩溃和硬件故障等&#xff0c;这些问题可了不得&#xff01;它们会让我们无法访问那些重要的数据&#xff0c;…

【机器学习】逻辑回归:原理、应用与实践

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 逻辑回归&#xff1a;原理、应用与实践引言1. 逻辑回归基础1.1 基本概念1.2 Sig…

Mysql8安装教程与配置(超详细图文)

MySQL 8.0 是 MySQL 数据库的一个重大更新版本&#xff0c;它引入了许多新特性和改进&#xff0c;旨在提高性能、安全性和易用性。 1.下载MySQL 安装包 注&#xff1a;本文使用的是压缩版进行安装。 &#xff08;1&#xff09;从网盘下载安装文件 点击此处直接下载 &#…

网络层-IP协议 二

一、网段划分 为了进行组网,把一个IP地址,分成了两个部分: 网络号 主机号 例如:192.168.2.100 这个IP地址中,前面一部分 : 192.168.2就是我们的网络号 后面一部分 100就是我们的主机号. 家用宽带来说,一般默认就是前面三个字节是网络号,主机号的范围就表示局域网中可以有…

开机弹窗找不到opencl.dll怎么办,教你几种有效的修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到opencl.dll文件”。这个问题可能会影响到我们的正常使用&#xff0c;因此了解其原因和解决方法是非常必要的。本文将从多个方面对“找不到opencl.dll文件”这一问题进行详细分析和解…

某h5st逆向分析

具体网址经过了base64处理 aHR0cHM6Ly9zby5tLmpkLmNvbS93YXJlL3NlYXJjaC5hY3Rpb24/a2V5d29yZD0lRTklOTklQTQlRTYlQjklQkYlRTYlOUMlQkEmc2VhcmNoRnJvbT1ob21lJnNmPTE1JmFzPTA 要做的是一个搜索的功能具体如图所示。 这里发现携带的参数中存在一个token还有一个加密参数&#x…

【网络安全的神秘世界】Kali火狐浏览器汉化教程

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 打开火狐浏览器 进入设置后&#xff0c;搜索language 打开之后选择添加其他语言&#xff0c;简体中文在最后一个 Add后点击ok即可

代码签名证书:软件安全的守护神

在数字化日益普及的今天&#xff0c;软件安全问题愈发受到人们的关注。而在这其中&#xff0c;一个常被提及但可能不为大众所熟知的名词——“代码签名证书”&#xff0c;实际上在软件安全领域扮演着举足轻重的角色。今天&#xff0c;我们就来聊聊代码签名证书对软件安全到底有…

SVM模型实现城镇居民月平均消费数据分类

SVM模型实现城镇居民月平均消费数据分类 一、SVM支持向量机简介二、数据集介绍三、SVM建模流程及分析一、SVM支持向量机简介 支持向量机是由感知机发展而来的机器学习算法,属于监督学习算法。支持向量机具有完备的理论基础,算法通过对样本进行求解,得到最大边距的超平面,并…

485数据采集模块

在工业自动化与智能化的浪潮中&#xff0c;数据采集作为整个系统的基础和核心&#xff0c;其准确性和实时性直接关系到生产效率和产品质量。而485数据采集模块&#xff0c;作为连接现场设备与上位机的重要桥梁&#xff0c;其性能与稳定性对于整个系统的运行至关重要。HiWoo Box…

浪潮电脑文件消失怎么恢复?原来有这五种方法

无论是工作、学习还是娱乐&#xff0c;电脑都扮演着举足轻重的角色。然而&#xff0c;在使用电脑的过程中&#xff0c;我们有时会遇到一些令人头疼的问题&#xff0c;比如文件突然消失。对于使用浪潮电脑的用户来说&#xff0c;文件消失可能是一个令人焦虑的问题。本文将为您详…

如何通俗易懂地理解大模型参数?

大型语言模型 (LLM) 的大小是通过参数数量来衡量的。举几个典型例子&#xff0c;GPT-3 有 1750 亿个参数&#xff0c;1750亿也可称为175B&#xff08;1B 10亿&#xff09;&#xff0c;Meta最新开源的Llama3 参数数量在 80 亿到 700 亿之间&#xff0c;智谱公司最新开源的GLM4-…

【再探】Java—Java 沙箱机制与类加载器

沙箱&#xff08;Sandbox&#xff09;机制是将Java程序限定在JVM特定的运行范围内&#xff0c;并严格限制代码对本地系统资源的访问&#xff0c;以保证代码的有效隔离&#xff0c;防止对本地系统造成破坏。 1 安全模型 类在加载过程中&#xff0c;类加载器会为类设置初始的安…

【Java毕业设计】基于JavaWeb的在线购物网站的设计与实现

文章目录 摘 要ABSTRACT目 录1 概述1.1 研究背景及意义1.2 国内外研究现状1.3 拟研究内容1.4 系统开发技术1.4.1 vue技术1.4.2 B/S结构1.4.3 Spring Boot框架1.4.4 MySQL数据库1.4.5 MVC模式 2 系统需求分析2.1 可行性分析2.2 功能需求分析 3 系统设计3.1 功能结构设计3.2 系统…

美国签证办理需要带哪些材料?

在申请美国签证时&#xff0c;准备充分的材料至关重要。以下知识人网整理的关于您可能需要携带的一些常见材料&#xff1a; 1.护照&#xff1a;您的护照必须是有效的&#xff0c;并且在签证申请过程中至少有六个月的有效期。 2.签证申请表&#xff1a;您需要填写并提交签证申请…