【Java基础】字符串的内存情况及应用场景

String

特点

  • 用双引号引起来的一串字符,字符串不变,它们的值在创建后不能被更改String str="hello";
  • 存储在堆中的字符串常量池
  • 已经定义过的字符串,再次定义时直接使用已有的
  • 字符串String类重写了**boolean equals(object obj)**方法,重写后的功能是比较两个字符串的内容是否一致

内存情况

  • 先去堆中的字符串常量池找“hello”,没有找到则在字符串常量池中创建一个“hello”
  • 这行代码中存在几个对象?一个是new创建的对象,一个是hello这个字符串对象,String str3=new String("hello");
class Demo9{public static void main(String[] args){
//字符串:用双引号引起来的一串字符,字符串不变,它们的值在创建后不能被更改
//先去堆中的字符串常量池找"hello",没有找到则在字符串常量池中创建一个"hello"String str1="he11o";
//先去堆中的字符串常量池找"hello",找到了,直接使用己有的"hello"String str2= "hello";sop(str1==str2); //true 
//这行代码中存在几个对象?一个是new创建的对象,一个是hello这个字符串对象String str3=new String("hello"); sop(str1==str3);//false
//字符串String类重写了boolean equals(object obj)方法,重写后的功能是比较两个字符串的内容是否一致boolean boo = str1.equals(str3);sop(boo);//true}//判断用户名密码是否正确public static boolean check(String username,String password){if(username!=null && username!="" && password!=null && password!=""){if("admin".equels(username)&&"123".equals(password))return true;}}//封装意识public static void sop(object obj){System.out.println(obj);}
}

在这里插入图片描述

字符串方法

获取

  1. 获取字符串的长度
    int length()

    int len = "owiueriouerioeur".length();
    
  2. 获取某一个位置上的字符
    char charAt(int index)

    char ch = "hello world".charAt(6);
    
  3. 获取字符在字符串中的位置
    如果要找的字符或者字符串不存在,返回值为**-1**

    • 返回字符在字符串中第一次出现的位置
      int indexOf(char ch)

      int index = "hello world".indexOf('l');
      
    • 第二个参数用于指定开始找的位置
      int indexOf(int ch, int fromlndex)

      int index = "hello world".indexOf('l',5);
      
    • 获取一个字符串在字符串中出现的位置
      int indexOf(String str)

      int index = "hello world llo".indexOf("llo");
      
    • 第二个参数用于指定开始找的位置
      int indexOf(String str, int fromIndex)

      int index = "hello world llo".indexOf("llo",5);
      
    • 最后一次出现的位置
      int lastlndexOf(char ch)

      int index = "hello world".lastIndexOf('k');
      

验证邮箱是否合法,包含@和. ,@在.的前边

public static void main(String[] args) {boolean boo = checkEmail("xiaoer163.com");sop(boo);
}
public static boolean checkEmail(String email){
if(email!=null && email!="")if(email.indexOf('@' )==-1)return false;else if(email.indexOf(' . ' )==-1)return false;else if(email.indexOf( '@' )>email.indexOf('.'))return false;elsereturn true;
return false;
}

判断

  1. 判断是否包含一个字符串
    boolean contains (CharSequence s) CharSequence

    boolean boo = "hello world".contains("wor");
    
  2. 判断两个字符串的内容是否相同 (区分大小写)
    boolean equals(Object anObject)

    boo = "hehe".equals("haha"); 
    
  3. 忽略大小写,判断两个字符串的内容是否相同
    boolean equalsIgnoreCase(String anotherString)

    boo = "HEHE".equalsIgnoreCase("hehe");
    
  4. 判断是否以某字符串开头
    boolean startsWith(String prefix)

    boo = "javamysql".startsWith("java");
    
  5. 判断是否以某字符串结尾
    boolean endsWith(String suffix)

    boo = "dog.jpg".endsWith("jpg");
    
  6. 判断字符串是否为

    为空返回true,不为空返回false

    只要双引号中有字符,就不是空字符串

    boolean isEmpty()

    boo = " ".isEmpty();
    

转换

字符数组字符串的转换

  1. 使用构造方法
    String(char[] value)

    char[] ch={'h','e','l','l','o'};
    String str1=new String(ch);//hello
    

    String(char[] value,int offset, int count) 字符数组,开始下标,个数

    String str2=new String(ch,2,3);//llo
    
  2. 使用静态方法
    static String copyValueOf(char[] data)

    String str3 = String.copyValueOf(ch);//hello
    

    static String copyValueOf(char[] data, int offset, int count)

    String str4=String.copyValueOf(ch,2,3);//llo
    
  3. 将字符串转成字符数组
    char[] toCharArray()

    char[] arr = "hello".toCharArray();//[h, e, l, l, o]
    
  4. 将字节数组转成字符串-----解码
    String(byte[] bytes)

    String(byte[] bytes, int offset, int length)

    byte[] b={65,66,67,68,69};
    String str5 = new String(b);//使用平台默认的编码进行解码
    sop(str5);//ABCDE
    String str6 = new String(b,2,3);
    sop(str6);//CDE
    

    使用指定的编码将字节数组转换成字符串:
    String(byte[] bytes, String charsetName)

    byte[] bb={-28, -67, -96, -27, -91, -67};
    String str6=new String(bb,"UTF-8");//使用UTF-8进行解码
    sop(str);//你好
    
  5. 将字符串转成字节数组-----编码
    byte[] getBytes()

    byte[] c = "你好".getBytes(); //——使用平台默认的编码进行编码
    sop(Arrays.toString(c));//[-60, -29, -70, -61]
    byte[] cc = "你好".getBytes("UTF-8"); //——使用UTF-8进行编码
    sop(Arrays.toString(cc));//[-28, -67, -96, -27, -91, -67]
    
  6. 将基本数据类型转换成字符串
    静态方法String.valueOf()

    String ss=String.valueOf(88);//88
    

替换

生成新的字符串,原字符串并没有被修改,字符串是不能被修改的

String replace(char oldChar, char newChar )
String replace(CharSequence target, CharSequence replacement)

String str = "hello world".replace('o','k');//hellk wkrld
String ss = "hello world".replace("wor","wc");//hello wcld

子串

String substring(int beginIndex )
String substring(int beginIndex, int endIndex)
包含起始位置,不包含结束位置,到结束位置的前一位

String s="I love java";
String s1=s.substring(7);//java
String s2=s.substring(2,6);//love

转换

大小写转换
String toLowerCase()
String toUpperCase( )

String t = "abcdefg".toUpperCase();//ABCDEFG
String tt = "LMN".toLowerCase();//lmn

去除空格

将字符串两端的空格去掉
String trim()

String m="    iweurie   owieuroiwer  ".trim();
sop("["+m+"]");//[iweurie   owieuroiwer]

模拟trim方法,将字符串两端的空格去掉String trim()

class Demo3{public static void main(String[] args){String s=trim("   hello ");sop("["+s+"]");}public static String trim(String str){int start=0,end=str.length()-1;//从左边找到第一个不是空格的字符while (str.charAt(start)==' ' && start<=end)start++;//从右边找到第一个不是空格的字符while (str.charAt(end)==' ' && end>=0)end--;return str.substring(start,end+1);}public static void sop(Object obj){……}
}

比较

  • 字典顺序比较两个字符串;

  • 左边的大于右边的返回大于0的数,左边的小于右边的返回小于0的数,左边的等于右边的返回0;

  • 对应的字符一一对比(第一个和第一个比,第二个和第二个比,……),当出现第一对互不相同的字符时,哪个字符大哪个字符串就大

int compareTo(String anotherString )
int compareToIgnoreCase(String str) (不区分大小写,比较大小)

int x = "aecd".compareTo("aaa");//4
x = "abc".compareToIgnoreCase("ABC");//0

拼接

String concat(String str)

String y = "hello".concat("world");//helloworld

切割

String[] split(String str)

String str=",wang,ji,guo,chen,sun";
String[] arr = str.split(",");
for(String ss:arr)sop(ss);

静态方法

将若干个字符串拼接到一起,在拼接的时候,元素与元素之间以指定的分隔符进行分隔。
String join ( CharSequence delimiter, CharSequence… elements )

String ss = String.join(",","ding","wang","yan");

以指定的格式,进行字符串的格式化
String format ( String format, object… args )

ss = String.format("%8s%5d%.1f%8c","hello",66,88.88,'k');
//1234567812345123412345678
//   hello   6688.9       k
ss = String.format("%8s %5d %.1f %8c","hello",66,88.88,'k');
//12345678_12345_1234_12345678
//   hello    66 88.9        k
常见占位符

%s : 替代字符串 → %ns : 凑够n位字符串,如果不够,补空格
%d : 整型数字占位符 → %nd : 凑够n位,如果不够,补空格
%f : 浮点型数字占位符 → %.hf : 保留小数点后面指定位的数字
%c : 字符型占位符

字符串缓冲区

  • StringBuffer

    可变的字符序列。 字符串缓冲区就像一个String ,但可以修改。
    线程安全的,可以安全地被多个线程使用

  • StringBuilder

    不能安全使用多线程

存储

  • StringBuffer append(boolean b)

    • 默认添加在容器的末尾
    • 返回原容器
    StringBuffer stringBuffer=new StringBuffer(); //字符串缓冲区
    StringBuffer sb1 = stringBuffer.append(false);//返回原容器
    StringBuffer sb2 = stringBuffer.append(666);
    sop(stringBuffer==sb1);
    sop(stringBuffer==sb2);
    stringBuffer.append(false).append(666).append("hello");//默认添加在容器的末尾
    sop(stringBuffer);//StringBuffer重写了toString方法,返回的是容器中的字符串
    
  • StringBuffer insert(int offset, boolean b)

    • 在指定位置添加数据
    stringBuffer.insert(8,"ok");//在指定位置添加数据
    

删除

StringBuffer delete(int start, int end)
不包括结束下标上的字符,到结束下标的前一位

StringBuffer deleteCharAt(int index)

stringBuffer.delete(8,10);
stringBuffer.deleteCharAt(7);

修改

StringBuffer replace(int start, int end, String str)
不包括结束下标上的字符,到结束下标的前一位

void setCharAt(int index, char ch)

stringBuffer.replace(5,7,"88");
stringBuffer.setCharAt(6,'6');

获取

char charAt(int index)
int indexOf(String str)
int indexOf(String str, int fromIndex)

int lastIndexOf(String str)
返回最右边出现的指定子字符串在此字符串中的索引。

int lastIndexOf(String str, int fromIndex)
返回最后一次出现的指定子字符串在此字符串中的索引。

int length()
返回长度(字符数)。

反转

StringBuffer reverse()

练习:使用StringBuilder打印一个矩形

public static void show(int rows,int cols)
{StringBuilder stringBuilder=new StringBuilder();for(int i=1;i<=rows;i++){for(int j=1;j<=cols;j++){stringBuilder.append("*");}stringBuilder.append("\r\n");}sop(stringBuilder);
}

在这里插入图片描述

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

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

相关文章

爱丁堡大学出新招,大小语言模型配合节约成本!

在大语言模型的应用中&#xff0c;往往面临着成本和性能权衡的问题。 一方面&#xff0c;大型LLM的参数量极大&#xff08;如70B&#xff09;&#xff0c;每次调用都可能带来更多的成本&#xff0c;而小型LLM&#xff08;如7B&#xff09;的成本则更容易被接受。 另一方面&am…

若依Ruoyi微服务版,通过docker-compose部署流程和部分坑记录

1 各个子微服务&#xff0c;yml文件修改&#xff0c;如nacos地址等等 【有坑&#xff0c;看下面】 2 后端服务打成jar包&#xff0c;mvn package命令 3 前端项目打包 4 docker目录下有个copy.sh文件&#xff0c;运行&#xff0c;将jar 包复制到 docker相应目录下&#xff0c;总…

接收区块链的CCF会议--NDSS 2025 截止7.10 附录用率

会议名称&#xff1a;Network and Distributed System Security Symposium (NDSS) CCF等级&#xff1a;CCF A类学术会议 类别&#xff1a;网络与信息安全 录用率&#xff1a;2024年接收率19.5% Submissions are solicited in, but not limited to, the following areas: Ant…

RabbitMQ:深入理解高性能消息队列

RabbitMQ&#xff1a;深入理解高性能消息队列 文章目录 RabbitMQ&#xff1a;深入理解高性能消息队列前言一、RabbitMQ概述二、RabbitMQ的核心概念三、RabbitMQ的工作原理一、生产者发送消息二、交换机转发消息三、队列存储消息四、消费者接收并处理消息 四、RabbitMQ的使用场景…

DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2,1306310-00-8,是一种重要的多肽化合物

一、试剂信息 名称&#xff1a;DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2CAS号&#xff1a;1306310-00-8结构式&#xff1a; 二、试剂内容 DOTA-Gly-Asp-Tyr-Met-Gly-Trp-Met-Asp-Phe-NH2是一种重要的多肽化合物&#xff0c;其CAS号为1306310-00-8。该多肽包含一个DO…

ICLR 2024 杰出论文开奖了!录用率31%,两篇国内论文获荣誉提名

朋友们&#xff0c;ICLR 2024开奖了&#xff01;5月7日至11日&#xff0c;今年的大会在奥地利维也纳展览会议中心举行。 ICLR&#xff08;国际表征学习大会&#xff09;是公认的深度学习领域国际顶级会议之一&#xff0c;属于CCF A类&#xff0c;主要专注于深度学习和强化学习等…

Unity 浮点数的精度问题

文章目录 前言一、精度问题1、数值不相等2、数值计算不确定3、不同设备计算结果不同 二、解决方法&#xff1a;总结 前言 说到浮点数精度&#xff0c;大家想到的就是double比float的精度高&#xff0c;想要高精度就用double类型。两者最明显的区别就是所占位数的不同&#xff…

java驱动bat脚本执行mysql恢复备份根据自定义mysql备份名

我有个需求&#xff0c;需要根据mysql备份的地址&#xff0c;恢复mysql数据 就是说我把sql备份了&#xff0c;然后需要通过java代码触发执行恢复的mysql脚本&#xff0c;但是需要传一个备份的路径 直接上代码 java代码如下&#xff1a; public static void main(String[] a…

22 | MySQL有哪些“饮鸩止渴”提高性能的方法?

短连接风暴 第一种方法:先处理掉那些占着连接但是不工作的线程。 kil id 第二种方法:减少连接过程的消耗。 让数据库跳过权限验证阶段,重启数据库,并使用–skip-grant-tables 参数启动。 慢查询性能问题 索引没有设计好 创建索引都支持 Online DDL 了,对于那种高峰期数…

hexo 博客插入本地图片时遇到的坑

哈喽大家好&#xff0c;我是咸鱼。 最近一直在折腾博客的事&#xff0c;说是 hexo 极易上手&#xff0c;我觉得只仅限于在安装部署的时候&#xff0c;随着对 hexo 的深入使用&#xff0c;发现遇到的问题还是挺多的。 那今天来讲一下我在把本地图片插入到 hexo 博客文章中遇到…

树莓派4b红外检测

1.红外检测连接图 2.红外检测工作原理 红外传感器的工作原理类似于物体检测传感器。该传感器包括一个红外LED和一个红外光电二极管&#xff0c;因此通过将这两者结合起来&#xff0c;可以形成一个光耦合器。 红外LED是一种发射红外辐射的发射器。该LED看起来与标准LED相似&a…

Games101-动画与模拟(求解常微分方程,刚体与流体)

Single Particle Simulation 规定了任何一个物体任何时刻的速度&#xff0c;知道它的初始位置&#xff0c;求它某个时间后的位置&#xff1f; 如果一个物体是匀速直线运动&#xff0c;用初始位置加上速度和时间的乘积即可 如上图&#xff0c;如果想描述一个粒子在一个速度场&am…

JAVA中的泛型、file类、IO流

泛型 什么是&#xff1a; 1、定义时通过一个标识&#xff0c;表示类型&#xff1b;2、Jdk5.0之后添加的 没有会造成的问题&#xff1a; 1、类型不安全&#xff1b; 2、强制转换比较繁琐&#xff1b; 1、E&#xff1a; list中使用&#xff1b;用指定的类型去替换E&#xff…

ASP.NET小型企业办公耗材库存管理软件的设计与实现

摘 要 库存管理系统是将企业的存和转等企业的经营业务有机的结合起来&#xff0c;达到数据共享、降低成本、提高效率。本系统前台采用.NET,后台数据库采用SQL Server 2000&#xff0c;语言采用C#。本系统实现的主要功能有库存查询、进货作业、领料作业、库存盘点、损坏处理等…

【shell】shell利用随机数生成指定范围的随机数及随机获取数组中元素

shell默认内置环境变量RANDOM echo $RANDOM 生成1~9的随机数 echo $RANDOM%91 %后面是多少&#xff0c;就是最大是多少 随机获取数组中的一个元素 array"3 4 44 8" random$(($RANDOM%41)) echo random:$random j0 for i in $array dojexpr $j 1if [ "$j&…

【平台开发】MTK6833——cache操作记录

CPU Cache 用的是一种叫 SRAM&#xff08;Static Random-Access Memory&#xff0c;静态随机存储器&#xff09; 的芯片。 通常分为L1&#xff0c;L2&#xff0c;L3三层缓存。 CPU 并不会直接和每一种存储器设备直接打交道&#xff0c;而是每一种存储器设备只和它相邻的存储器…

Linux---HTTP协议

HTTP HTTP协议&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种应用层协议&#xff0c;主要用于在Web浏览器和Web服务器之间传输数据。 一、认识URL 平时我们俗称的 " 网址 " 其实就是说的 URL http请求样例 看起来是一行一…

ubuntu20文件安装和卸载cuda11.6

搜索cuda 11.6 nvidia&#xff0c;进入官网https://developer.nvidia.com/cuda-11-6-0-download-archive 选择linux --> runfile 用安装包安装 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda_11.6.0_510.39.01_linux.run sudo s…

uniapp 小程序图片懒加载组件 ImageLazyLoad

预览图 组件【ImageLazyLoad】代码 <template><viewclass"image-lazy-load":style"{opacity: opacity,borderRadius: borderRadius rpx,background: background,transition: opacity ${time / 1000}s ease-in-out,}":class"image-lazy-loa…

MySQL中的批量更新实战

MySQL中的批量更新实战 表结构 mysql> desc dept; --------------------------------------------------------- | Field | Type | Null | Key | Default | Extra | --------------------------------------------------------- | deptno | int(11) …