Java基础-String常用的方法

String常用的三种构造方法

    public static void main(String[] args) {//1.使用常量字符串构造String s1 = "1.Hello world";System.out.println(s1);//2.使用new关键字构造String s2 = new String("2.Hello world");System.out.println(s2);//3。使用字符数组构造char[] ch = {'H','e','l','l','o'};String s3 = new String(ch);System.out.println(s3);//输出字符串长度System.out.println(s1.length());System.out.println("hello".length());//字符串中这种写法也是ok的//判断字符串长度是否为0System.out.println(s1.isEmpty());//输出false/*String s4 = null;System.out.println(s4.isEmpty());//会报空指针错*/String s5 = "";//字符串为0返回trueSystem.out.println(s5.isEmpty());}
  • 字符串是引用型变量,变量需要用“”一对双引号引起来 
  • null和字符串为0不是一个概念

介绍String对象中四种常见的比较

日常中,遇到字符串比较的情况还是比较多的;"=="对于String这种引用型变量来说,比较的是一个哈希地址,是比较不了字符串中的内容是否相等的:

    public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("abc");String s3 = s1;System.out.println(s1 == s2);//falseSystem.out.println(s1 == s3);//true}

由结果可见,s1和s2是两个不同的对象,自然的地址也不同,用"=="去比较输出的结果固然是false,可以理解成"=="比较两个引用变量引用的是否为同一个对象;

那么如何可以比较字符串中的内容是否相等呢?我们引出了equals()方法(按照字典序比较);在使用equals的时候,String类重写了父类Object中equals()方法,使得可以比较字符串内的内容。

而equals方法返回的是一个布尔值,我们并不知道字符串之间的关系,所以我们引入了返回int类型的compareTo()方法,也是同样的按照字典序比较:

     

    值得注意的是它的比较规则:

    1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
    2. s1>s2返回大于0的数字;s1=s2返回0;s1<s2返回小于0的数字
    3. 返回值是对应字符ASCII码的差值

    那么如果我们需要忽略大小写的比较又该用哪一个方法呢?比如我们文件名或扩展名检查、用户名或密码的校验,通常都是需要忽略大小写来增加灵活性的,可以用compareToIgnoreCase(String str) 方法;这个方法和compareTo()的使用方法和规则是一样的,只是它忽略大小写去对字符串进行比较;

    字符串查找String提供的部分常用方法

    以下是部分常用的方法及使用的规则案例:

     

     

    字符串转换

    1.其他数据类型转换成字符串用 valueOf方法:

     

    2.字符串的大小写转换toUpperCase()&toLowerCase()

    3. 字符串转数组用toCharArray()

    public static void main(String[] args) {//字符串转数组String s1 = "hello world";char[] ch = s1.toCharArray();for (int i = 0; i < ch.length; i++) {System.out.println(ch[i]);}//数组转字符串,直接使用String转就好String s2 = new String(ch);System.out.println(s2);}

     4.格式化字符串用到format()

     字符串的替换:

    注意:针对这种直接赋值没有对象的字符串,在Java中会又一块特殊的字符串常量池,存放他们;字符串常量池中不会存在两个一样的字符串,如果两个字符串一样的画它们的地址值是一样的;

    字符串拆分

        public static void main(String[] args) {String str = "abc def Good evening";//1.将字符串全部拆分String[] result = str.split(" ");//按空格for (String res:result){System.out.println(res);}System.out.println("==========================");//2.部分拆分String[] result2 = str.split(" ",3);for (String res2:result){System.out.println(res2);}//3.有特殊字符的字符串分割要记得加上转义符String str2 = "192.168.1.1" ;String[] result3 = str.split("\\.") ;//转义符for(String s: result) {System.out.println(s);}}

     

    1. 部分拆分时,程序不会根据字符串的长短去平均分;而是根据先后顺序,分成相应的份数,后面的就不分了
    2. 有些特殊字符作为分割符可能无法正确切分, 需要加上转义
    3. 字符"|","*","+"都得加上转义字符,前面加上 "\\"
    4. 如果是 "\"需要拆分 ,那么就得写成 "\\\\"
    5. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

     以上所有涉及到修改字符串内容的操作都是创建一个新对象,改变的是新对象,而不是在原有的字符串上改动,不管是字符串转换、格式化又或时字符串截取等等,原有的字符串还是原来的,而修改后的字符串是一个新的字符串对象;

    似上面这种修改字符串的情况,如果放在循环里面每次循环都会创建一个新的对象,产生比较多的临时对象,对程序来说效率是比较低的,我们在使用的时候也需要尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

     那么如果想要修改字符串中内容,该如何操作呢?于是有了StringBuilder和StringBuffer类

    StringBuilder和StringBuffer类

    StringBuilder和StringBuffer类是为了方便字符串的直接修改而产生的这两个类大部分功能是相同的,不同的是StringBuilder会比较经常用在单线程的问题上,而StringBuffer会用更多的应用到多线程的问题上。下面是一些比较常用的方法,大部分都是和String当中的方法重合的

    String、StringBuffer、StringBuilder的区别

    • String是字符串常量不可变的,一旦创建就不能修改,任何对String的操作都会创建新的字符串对象。而StringBuilder和StringBuffer是可变的。

    • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程不安全操作;在安全操作方面StringBuffer>StringBuilder>String

    • StringBuilder和StringBuffer类大部分功能相同


    感谢大家阅读📚点赞👍收藏⭐评论✍关注❤

    博客主页: 【长毛女士-CSDN博客

    水平有限,欢迎大家纠错啦♥

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

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

    相关文章

    数学建模:多目标规划:ε约束法、 理想点法

    一、ε约束法定义ε约束法通过将部分目标函数转化为约束条件&#xff0c;保留一个主要目标进行优化。1、选择一个主要目标 fk​(x) 进行优化。2、其他目标 fi​(x) 转化为约束 fi​(x)≤εi​&#xff0c;其中 εi​ 是决策者设定的容许阈值。​​原理​​​​目标选择​​&…

    linux kernel struct regmap_config结构详解

    在 Linux 内核中&#xff0c;struct regmap_config 是 ​Regmap 子系统的核心配置结构体&#xff0c;用于定义如何与底层硬件寄存器进行交互。Regmap&#xff08;Register Map&#xff09;子系统通过抽象不同总线&#xff08;如 I2C、SPI、MMIO 等&#xff09;的寄存器访问细节…

    【Python3教程】Python3高级篇之CGI编程

    博主介绍:✌全网粉丝23W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

    docker安装Consul笔记

    安装过程 详细步骤如下&#xff1a; 首先拉取Consul的Docker镜像&#xff1a; docker pull hashicorp/consul:1.18.1创建Consul的配置文件和数据目录&#xff1a; mkdir -p /srv/docker/consul/data mkdir -p /srv/docker/consul/config在config目录下创建一个config.json配置文…

    .net数据脱敏

    .NET数据脱敏技术&#xff1a;保障数据安全的有效手段 在当今数字化时代&#xff0c;数据安全至关重要。尤其是涉及到用户的敏感信息&#xff0c;如密码、手机号码等&#xff0c;必须采取有效的措施进行保护。数据脱敏就是这样一种技术&#xff0c;它能够在不影响数据可用性的…

    【openp2p】 学习2:源码阅读P2PNetwork和P2PTunnel

    【openp2p】 学习1:P2PApp和优秀的go跨平台项目已经做了初步分析。阅读原版工程,感觉工程是一个暴露内网服务端口,让外部可以用的一个实现是一个完整的、跨平台的可商业化的应用。感谢作者需要学习作者的设计思路工程构建 F:\GolandProjects\openp2p\core\p2pnetwork.go通常…

    网安学习NO.14

    防火墙基础实验 传统防火墙配置实验拓扑图PC&#xff1a; ip 192.168.10.1 255.255.255.0 192.168.10.254 ip dns 114.114.114.114二层交换机 vl 10 ex int e0/0 sw mo ac sw ac vl 10 ex inr e0/1 sw tr en do sw mo tr三层交换机 vl 10 ex int g0/0 sw tr en do sw mo tr ex …

    ESP32语音唤醒

    两种唤醒方式AfeWakeWord与EspWakeWord对比 底层技术 AfeWakeWord&#xff1a;基于ESP-IDF的AFE框架&#xff08;esp_afe_sr_iface_t&#xff09;&#xff0c;高性能模式&#xff08;AFE_MODE_HIGH_PERF&#xff09;EspWakeWord&#xff1a;基于WakeNet接口&#xff08;esp_wn_…

    借助 Wisdom SSH AI 助手,轻松安装 CentOS 8 LNMP 环境

    打开Wisdom SSH软件&#xff0c;在AI对话区输入“在CentOS 8服务器安装LNMP环境”&#xff0c;AI助手会按以下步骤分析并执行安装&#xff1a; 安装Nginx 分析&#xff1a;CentOS 8默认软件源可能没有Nginx&#xff0c;所以要先启用Nginx官方软件源&#xff0c;然后才能安装Ngi…

    WD0407 40V 7A 超级肖特基二极管,应用于开关汽车工业控制

    WD0407 40V 7A 超级肖特基二极管说明​ 产品概述​ WD0407 是一款性能卓越的超级肖特基二极管&#xff0c;专为满足现代电子设备对高效、可靠电源管理的需求而设计。它采用先进的半导体制造工艺&#xff0c;在诸多关键性能指标上表现出色&#xff0c;能够为各类电路提供稳定、高…

    卢比危机下的金融破局:科伦坡交易所技术升级作战图

    &#x1f30f; 今日南亚风暴眼 印度双重上市机制加速落地&#xff1a;印度国家证券国际交易所&#xff08;NSE IX&#xff09;与科伦坡证券交易所&#xff08;CSE&#xff09;达成技术对接协议&#xff0c;斯企可通过印度GIFT City吸引美元资本&#xff0c;交易时段覆盖全球22小…

    upload-labs靶场通关详解:第20关 /.绕过

    一、分析源代码// 初始化上传状态标记&#xff0c;默认为false&#xff0c;即文件未上传 $is_upload false; // 初始化消息变量&#xff0c;用于存储错误信息 $msg null;// 检查是否通过POST方式提交了表单&#xff08;点击上传按钮&#xff09; if (isset($_POST[submit])) …

    企业用云状态评估

    云部署形态及其策略规划成熟度 单云部署&#xff1a; 主要业务负载运行在单一公有云或私有云上 多云/混合云部署 —有清晰战略规划与实施&#xff1a; 业务负载运行在多个云&#xff08;公有云或混合云&#xff09;上&#xff0c;并且企业拥有清晰的多云/混合云战略规划&#x…

    STM32G473串口通信-USART/UART配置和清除串口寄存器状态的注意事项

    USART和UART配置的区别 如果USART使用的是异步通信&#xff0c;那么UART与USART配置基本相同。 USART配置如下:UART配置如下&#xff1a;如果USART使用的是同步通信&#xff0c;那么UART配置就有差异。首先通信双方都是使用USART的同步通信&#xff0c;一个主机&#xff0c;一个…

    Debezium:一款基于CDC的开源数据同步工具

    Debezium 是由 Red Hat 开源的一种基于变更数据捕获&#xff08;CDC&#xff09; 的分布式平台&#xff0c;专为实时捕获和传播数据库的变更事件而设计。Debezium 常见的使用场景包括&#xff1a; 实时数据集成&#xff1a;将数据库变更同步到数据仓库或数据湖&#xff0c;支撑…

    从面向对象编程语言PHP转到Go时的一些疑惑?

    前言 1、php中面向对象编程时 与 Go中的区别&#xff1f; 2、php中最常使用laravel框架&#xff0c;不用过多关注依赖注入和反射&#xff0c;在go中又该如何使用呢&#xff1f;是 舍弃&#xff1f; 本文是一个系统化梳理&#xff0c;帮助从 语言哲学 → 依赖注入在 Go 的现状 →…

    Vue3中使用konva插件动态制作海报以及可在画布上随意移动位置

    1、下载konva插件 官网地址 npm install vue-konva konva --save2、在主文件中引入&#xff0c;如main.js import VueKonva from vue-konva; app.use(VueKonva);3、组件内使用&#xff0c;我现在的布局是左侧是画布&#xff0c;右侧是相关设置&#xff08;颜色、标题等&#…

    政安晨【开源人工智能硬件】【ESP乐鑫篇】 —— 在macOS上部署工具开发环境(小资的非开发者用苹果系统也可以玩乐鑫)

    政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 前言 开源人工智能硬件会给你带来无限可能&#xff0c;玩开源硬件&#xff0c;环境和工具少…

    Vue3 学习教程,从入门到精通,vue3学习中的JavaScript ES6 特性详解与案例(5)

    vue3学习中的JavaScript ES6 特性详解与案例 ES6&#xff08;ECMAScript 2015&#xff09;是 JavaScript 的一个重要版本&#xff0c;引入了许多新特性&#xff0c;极大地提升了语言的表达能力和开发效率。本文将详细介绍 ES6 的主要特性&#xff0c;包括 let 和 const 命令、变…

    深度学习模型1:理解LSTM和BiLSTM

    深度学习模型1&#xff1a;理解LSTM和BiLSTM 因为最近科研复现论文中需要了解单向LSTM和双向LSTM&#xff0c;所以就学习了一下LSTM的基本原理&#xff0c;下面孬孬带着大家一起学习一下&#xff0c;感谢大家的一键三连 一、RNN 因为谈到LSTM&#xff0c;就必不可少的会考虑RNN…