27-String类

news/2024/7/6 20:53:48/文章来源:https://www.cnblogs.com/Mc9r4dy/p/18280089

String

  • 字符串是常量,创建之后不可改变
  • 字符串字面值存储在字符串池中,可以共享
  • String s = "hello"; 产生一个对象,字符串池中存储
  • String s = new String("hello");//产生两个对象,堆、池各存储一个
        String name = "hello";//"hello"常量存储在字符常量池中。name在栈区指向方法区字符串常量池“hello”name = "zhangsan";//把zhangsan赋值给name,并不是把hello修改称zhangsan;而是在字符串池创建zhangsan//不可变性:给字符串赋值时,并没有修改数据,而是重新开辟空间String name2 = "zhangsan";//栈区中的name2指向方法区中字符串常量池的“zhangsan”//这样name;name2指向字符串池里的同一个对象“zhangsan”//name;name2在栈区是两个地址//字符串另一种创建方式String str = new String("java");//str在栈区,“java”在方法区字符串池,  new String--->堆中创建一个对象“java”//str指向堆中的对象,,存的是堆中的“java”的地址//但是实际上内存里,堆中的“java”是指向常量池中的“java”,堆中没有“java”(可以理解有);但实际也是有两个对(堆中和常量池)String str2 = new String("java");System.out.println(str == str2);//falseSystem.out.println(str.equals(str2));//true(因为String类重写了equals方法,比较的是内容了)

内存分析

常用方法

  1. length(); 返回字符串长度
  2. charAt(int index); 返回某个位置的字符
  3. contains(String str); 判断是否包含某个字符串
  4. toCharArray(); 将字符串转换成数组
  5. indexOf(String str); 查找str首次出现的下标,存在,则返回该下标;不存在则返回-1
  6. lastIndexOf(String str); 查找字符串在当前字符串中最后一次出现的下标索引
  7. trim(); 去掉字符串前后的空格
  8. toUpperCase(); 将小写转成大写
  9. endWith(String str); 判断字符串是否以str结尾
  10. replace(char oldChar,char newChar); 将旧字符(或字符串)替换成新字符串
  11. split(String str); 根据str做拆分
  12. equals();比较字符串是否相等
  13. compare(); 比较大小(字典表顺序)
        //字符串方法使用String content = "java2024";System.out.println(content.length());//8System.out.println(content.charAt(content.length()-1));//4System.out.println(content.contains("java"));//trueSystem.out.println(Arrays.toString(content.toCharArray()));//[j, a, v, a, 2, 0, 2, 4]System.out.println(content.indexOf("java"));//0System.out.println(content.lastIndexOf("2"));//6String content2 = "    hello world  ";System.out.println(content2.trim());//hello worldSystem.out.println(content2.toUpperCase());//    HELLO WORLD (content2还是指向"    hello world  ")System.out.println(content2.toLowerCase());//    hello worldSystem.out.println(content2.endsWith(" "));//trueSystem.out.println(content2.startsWith("hello"));//falseSystem.out.println(content.replace("java", "php"));//php2024String[] arr = content2.split(" +");//填个加号表示多个空格也拆分for (String s : arr) {System.out.println(s);}/*helloworld*/

案例

  • 需求

    已知String str = ”this is a text“;

    1. 将str的单词单独获取出来
    2. 将str中text替换为practice
    3. 在text前面插入一个easy
    4. 将每个单词的首字母改成大写
        String str = "this is a text";//1String[] arr = str.split(" ");for (String s : arr) {System.out.println(s);}//2System.out.println(str.replace("text", "practice"));//3System.out.println(str.replace("text", "easy text"));//4for (int i = 0; i < arr.length; i++) {char first = arr[i].charAt(0);//把第一个字符变大写char upperfirst = Character.toUpperCase(first);//Character 是char的包装类String news = upperfirst+arr[i].substring(1);//substring();截取System.out.println(news);}/*thisisatextthis is a practicethis is a easy textThisIsAText*/

可变字符串

  • 由于String类的不可变性,运行过程中会产生很多无用字符串,效率上来讲也比较低。

StringBuffer

  • 可变长字符串,JDK1.0提供,运行效率慢(比String高的),线程安全
        StringBuffer sb = new StringBuffer();//1 append(); 追加sb.append("javaYes");System.out.println(sb.toString());//javaYessb.append("javaNo");System.out.println(sb.toString());//javaYesjavaNo//2 insert(); 添加sb.insert(0,"我在最前面");System.out.println(sb.toString());//我在最前面javaYesjavaNo//3 replace();sb.replace(0,5,"hello");//hellojavaYesjavaNoSystem.out.println(sb.toString());//4 delete();删除sb.delete(0,5);System.out.println(sb.toString());//javaYesjavaNo//若要清空,则delete(0,sb.lenth());

StringBuilder

  • 可变长字符串,JDK5.0提供,运行效率块,线程不安全

  • 用法与StringBuffer一样,在单线程情况下就用StringBuilder

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

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

相关文章

01字典树和可持久化01字典树

01字典树 01字典树是一种只有0和1两种边的字典树。可以解决查询第 \(k\) 小,查询 \(x\) 是第几小等问题。 查询第 \(k\) 小 可以把输入的数转成等长二进制,然后插入01字典树。比如将 \([0,0,1,3,3]\) 插入字典树:这里红色数字表示以该段为前缀的数的个数,黑色表示对应的数。…

c# , net 创建树形结构,创建树形节点

/// <summary> /// 生成树形结构 /// </summary> public void GetTreeNode() {//SqlHelper.GetSqlDataReader是封装的查询数据库语句,可根据自己需求封装//假设获取所有一级节点List<Products> products = SqlHelper.GetSqlDataReader(sql);for (int i = 0; …

abc360 E 题解

E 对于位置2~n,它们的概率是相等的。 n*n个(x,y)对。其中x可以等于y。对于x/y,y的逆元rev(y)为mul(y,mod-2)。 加、减、乘、除都可以做。比如48/9和16/3的结果是一样的,48*rev(9)%mod = 16*rev(3)%mod。比如3*rev(2)%mod = (rev(2)+rev(2)+rev(2))%mod.对于每次操作,有多少…

数业智能荣登「全球应用算法模型大赛50强」

近日,由上海市经济和信息化委员会、上海市普陀区人民政府,上海市人工智能行业协会主办,上海人工智能研究院等单位联合承办的《BPAA第四届全球应用算法模型典范大赛》经过一个多月的角逐,最终公布《BPAA第四届全球应用算法模型典范大赛TOP50榜单》。数业智能心大陆凭借独立自…

快速调用 GLM-4-9B-Chat 语言模型

一、确认本机显卡配置二、下载大模型 国内可以从魔搭社区下载, 下载地址:https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files 三、运行官方代码import torch from transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda"tokenizer = A…

戴尔服务器SQL server数据恢复

服务器数据恢复环境: 一台Dell服务器,共有10块硬盘,配置了raid5磁盘阵列,操作系统:linux,里面存有SQL server数据库。服务器数据恢复故障检测分析: 服务器在正常运行过程中,对服务器进行重装系统操作,操作成功后发现服务器的磁盘分区与原来不同,其中一个分区丢失,其…

网络安全:Nginx安全问题使1400多万台服务器容易受到ddos攻击

据外媒报道,近日 nginx 被爆出存在安全问题,有可能会致使 1400 多万台服务器易遭受 DoS 攻击。 而导致安全问题的漏洞存在于 HTTP/2 和 MP4 模块中。 新版本的Nginx Web服务器已于11月6日发布,用于修复影响1.15.6,1.14.1之前版本的多个安全问题, 该漏洞允许潜在的攻击者触发…

服务器硬盘亮红灯数据恢复

故障服务器数据恢复环境: 一台故障服务器,有3块SAS 320GB的硬盘组建的raid5磁盘阵列。 故障服务器数据恢复检测分析: 服务器运行过程中有一块硬盘的指示灯变为红色,raid5磁盘阵列出现故障,服务器上层操作系统的分区无法识别。服务器数据恢复过程: 1、将故障服务器上磁盘编…

服务器RAID5故障该如何解决

故障服务器恢复环境: 一台HP LH6000的服务器,4块18GB的硬盘做成RAID5磁盘阵列,操作系统为Window 2000,数据库是Server 2000。 故障服务器检测分析: 故障服务器经检测发现,一块硬盘红灯闪亮,机器还在正常运行,但没有多久,系统就不能正常运行,这时才发现另一块硬盘的红…

存储断电导致虚拟机无法启动

故障存储虚拟机环境: 一台VMware虚拟机无法启动(虚拟机中存储了oracle数据库)。故障存储虚拟机检测分析: 发生故障的存是由于机房意外断电导致,清空cache并尝试重新启动该虚拟机但失败。需要对该存储进行数据恢复。 故障虚拟机数据恢复流程: 1.合并虚拟机快照(因虚拟机中…

振弦采集仪在岩土工程监测中的优点与应用

振弦采集仪在岩土工程监测中的优点与应用 河北稳控科技振弦采集仪是一种常用的岩土工程监测仪器,通过测量振弦的振动频率和振幅,可以得到土体的力学特性参数,从而对土体的变形和稳定性进行分析和评估。振弦采集仪具有一些优点,同时在岩土工程的监测中有着广泛的应用。 第一…

程序员悠闲的一天{苏州周末休闲文化1日游

随便写写,平时很忙,苏州,都是姑苏区、园区、吴中区活动的比较多,因为外地朋友来了,他们想去相城区,那就出发吧。明天继续回去写代码搬砖了。拍照技术不行凑合看吧。

冗余组典型配置举例

1、组网需求工作在三层,上下行分别连接两台路由器,两台路由器接口不在同一网段如图所示,Device A和Device B组成IRF,Router 1和IRF相连的接口与Router 2和IRF相连的接口不在同一网段,Router 3和IRF相连的接口与Router 4和IRF相连的接口不在同一网段。 正常情况下,流量走R…

git 通过ssh 拉 gitlab项目代码

通过https 登录token 拉取不到 ,就用ssh吧!先查看本地git的配置 git config --list --global发现没有配置 增加配置 git config --global user.name "beckh" git config --global user.email "自己的邮箱" 生成密钥 ssh-keygen -t rsa -C "自己邮箱…

java实现微信登录

上一篇做了php的微信登录,所以也总结一下Java的微信授权登录并获取用户信息这个功能的开发流程。前言 上一篇做了php的微信登录,所以也总结一下Java的微信授权登录并获取用户信息这个功能的开发流程。 配置 配置什么的就不多说了,详细的配置可以直接前往我上一篇查看。 http…

程序员的零食好物:十分米莲藕汁 写代码头秃

今日种草打卡一件办公室清爽养生饮料十分米饮品 宠粉福利店铺 :某信小程序:十分米生活馆 抖店:十分米当夏日的热浪如潮水般汹涌而来,你是否渴望一种能瞬间驱散酷暑、唤醒味蕾的神奇饮品? 今天,我要为你介绍的,就是这样一款清凉解暑的秘密武器——十分米莲藕汁宝应。 它不…

SpringBoot+mail 轻松实现各类邮件自动推送

一、简介 在实际的项目开发过程中,经常需要用到邮件通知功能。例如,通过邮箱注册,邮箱找回密码,邮箱推送报表等等,实际的应用场景非常的多。 早期的时候,为了能实现邮件的自动发送功能,通常会使用 JavaMail 相关的 api 来完成。后来 Spring 推出的 JavaMailSender 工具,…

fastjson低版本反序列化bug/设计缺陷记录

1. 问题场景 _id正常的赋值 相同的代码我们继续跑 _id的值被反序列化到id上了??? 相同的代码,跑出不一样的反序列化结果,amazing 2.问题探究 2.1 List<FieldInfo> 反序列化时会先创建一个List<FieldInfo>每一个FieldInfoList<FieldInfo>的填充方式:遍历…

编译安装Kubernetes 1.29 高可用集群(7)--Metrics Server节点监控配置

1.部署Metrics Server节点监控1.1 在任意k8s-master节点上下载Metrics Server的创建文件 https://github.com/kubernetes-sigs/metrics-server/releases wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml 1.2 修改单机版配置…