【前端学java】java中的字符串操作(10)

往期回顾:

  • 【前端学java】JAVA开发的依赖安装与环境配置 (0)
  • 【前端学 java】java的基础语法(1)
  • 【前端学java】JAVA中的packge与import(2)
  • 【前端学java】面向对象编程基础-类的使用 (3)
  • 【前端学java】类中的访问权限详解,通俗易懂(4)
  • 【前端学java】java中final修饰符(5)
  • 【前端学java】全网最通俗易懂的JAVA抽象概念(6)
  • 【前端学java】Java中的接口和枚举概念(7)
  • 【前端学java】java中的Object类(8)
  • 【前端学java】java 中的数组(9)

字符串的创建

同前端代码一样,java中的字符创建非常简单

public class Object_01 {public static void main(String[] args) {// 字符串创建String name = "shixiaoshi";}
}

java中字符串的创建是基于java.lang.String这个类的,这意味着,字符串的创建实际上是这样的

public class Object_01 {public static void main(String[] args) {// 字符串完成的创建方式String name = new String("shixiaoshi") ;}
}

实际开发中应该使用那种?

答案显而易见,使用双引号直接声明更方便快捷!

java虚拟机基于第一种创建方式有内部优化,所有相同的字符数据,其实来源于同一个字符串对象,这样就可以降低频繁的new String()带来的资源和内存消耗了。

public class Object_01 {public static void main(String[] args) {// 字符串完成的创建方式String name = new String("shixiaoshi") ;String name1 = new String("shixiaoshi") ;String name2 = "shixiaoshi";String name3 = "shixiaoshi";System.out.println(name == name1);   // falseSystem.out.println(name1 == name2);  // falseSystem.out.println(name2 == name3);  // true}
}

上述代码验证了通过new String创建完全相同的字符串,结果也是不同的字符对象;通“”直接创建的字符,结果是相同的。

字符串和字符是不相同的概念

要注意的是,字符串和字符是不一样的,比如字符串“8石f”,实际是由“8”、“石”、“f”三个字符组成的。

我们在来复习一下java中的基本数据单位概念。

基本数据单位

在Java中,最小的的数据单位是Byte,也就是字节类型,1 字母 = 1 byte ,一个汉字是一个字符,占两个字节。

之前的学习中,我们介绍了基本数据类型。每种数据类型的字节数都是不尽相同的,我们来复习一下:

整型数据类型(整数):

  • byte:1个字节,范围为-128到127
  • short:2个字节,范围为-32,768到32,767
  • int:4个字节,范围为-2,147,483,648到2,147,483,647
  • long:8个字节,范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807

浮点型数据类型(小数):

  • float:4个字节,范围为±3.40282347E+38F(有效位数为6-7位)
  • double:8个字节,范围为±1.7976931348623157E+308(有效位数为15位)

字符型数据类型:

  • char:2个字节,表示一个Unicode字符

布尔型数据类型:

  • boolean:表示逻辑值,只能是true或false

现在,我们应该能清除的知道,“8石f” 这个字符串的构成了

字符串8石f
字符8f
字节1111

通过上述例子,我们也能明白,字符串实际就是一个特殊的字符数组拼接而成的。

通过字符数组创建字符串

public class Object_01 {public static void main(String[] args) {char[] name = {'石','小','石'};String names = new String(name);System.out.println(names);   // 石小石}
}

注意,char[] name = {‘石’,‘小’,‘石’} 代码中, 用的是单引号而不是双引号,使用双引号会报错。

java中的单引号表示字符,一般是char类型的;java中的双引号是字符串,是String类型的。

转义字符

我们如果想打印一个引号,该怎么做呢?

直接打印必然报错,我们只需要加一个转义字符即可!

public class Object_01 {public static void main(String[] args) {System.out.println(""");   // "}
}

字符串的操作

拼接

和前端一样,字符串的拼接可以直接用 + 号;其作用和前端的+用法效果是一致的。

String name = "shi" + "xiao" + "shi";

这种形式创建的字符等同于下面方式创建的字符

String name1 = "shixiaoshi";

这两种形式创建的字符其实完全一样

public class Object_01 {public static void main(String[] args) {// 拼接String name = "shi" + "xiao" + "shi";String name1 = "shixiaoshi";System.out.println(name.hashCode() == name1.hashCode()); // true}
}

hashCode方法用于返回对象的内存地址,因此可以判断两个字符对象相同。

比较

要比较两个字符串是否相同,可以用equals。

equals用于判断两个对象是否相等。默认情况下,equals()方法比较的是对象的引用是否相同(即是否指向同一个内存地址)。

public class Object_01 {public static void main(String[] args) {String a = "shi";String b = "shi";System.out.println(a.equals(b));    // true}
}

equals是区分大小写的

public class Object_01 {public static void main(String[] args) {String a = "shi";String b = "SHI";System.out.println(a.equals(b));  // fasle}
}

如果想忽略大小写,可以用equalsIgnoreCase

截断

substring

java中的字符截断方法substring和前端的字符截断方法substring也是一致的

public class Object_01 {public static void main(String[] args) {String java = "hello world";System.out.println(java.substring(0,5));   // hello}
}for (int i=0;i < s.length;i++){System.out.println(s[i]);}

split

splitf方法将一个字符分隔成数组,和前端用法也是一致的

trim

trim() 方法用于删除字符串的头尾空白符。这和前端中的trim方法用法也是一样的

public class Object_01 {public static void main(String[] args) {String a = " hello world ";System.out.println(a.trim());}
}

替换

repalce

replace() 方法通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。

public String replace(char oldChar,char newChar)

它的第一个参数只能是字符或字符串

public class Object_01 {public static void main(String[] args) {String a = "hello hello world";System.out.println(a.replace("hello","hi"));  // hi hi world}
}

注意,这和前端中的replace是有些区别的。前端中:replace用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

<script>var str = "Hello Hello World!";
let index = str.replace(/Hello/i, "hi");
console.log(index); // hi Hello World!
</script>

前后端replace区别

1、java中replace第一个参数只能是字符或者是字符串;而js可以是正则。

2、java中replace替换后,所有匹配到的字符都会变化;而js中,匹配的字符只会替换第一个。

replaceAll

replaceAll() 方法使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。

语法

public String replaceAll(String regex, String replacement)

参数

  • regex – 匹配此字符串的正则表达式。
  • newChar – 用来替换每个匹配项的字符串。
public class Object_01 {public static void main(String[] args) {String a = "hello hello world";System.out.println(a.replaceAll("hello|world","hi"));  // hi hi hi}
}

js中的repalceAll用法和这个也是大同小异的

大小写转换

java中的字符大小写转换和前端是一致的

public class Object_01 {public static void main(String[] args) {String a = "Hello";System.out.println(a.toLowerCase()); // helloSystem.out.println(a.toUpperCase()); // HELLO}
}

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

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

相关文章

springcloud学生选课系统源码

开发技术&#xff1a; jdk1.8&#xff0c;mysql5.7&#xff0c;idea&#xff0c;nodejs&#xff0c;vscode springcloud springboot mybatis vue elementui 功能介绍&#xff1a; 学生&#xff1a; 登录&#xff0c;统计分析&#xff0c;选课&#xff08;查看课程及选择&a…

API网关那些事【架构新知系列】

目前随着云原生ServiceMesh和微服务架构的不断演进&#xff0c;网关领域新产品不断出现&#xff0c;各种网关使用的技术&#xff0c;功能和应用领域也不断扩展&#xff0c;在各有所长的前提下也有很多功能重合&#xff0c;网上各种技术PR文章&#xff0c;评测资料和网关落地实践…

新能源充电桩工业4G路由器应用,推动绿色出行,响应环保理念

在智慧城市环保事业发展领域&#xff0c;新能源技术应用成熟&#xff0c;物联网技术越来越广泛&#xff0c;充电桩物联网成为了智慧城市建设的热门应用。充电桩作为新能源汽车的重要配套设施&#xff0c;对于节能减排和推动环保理念可持续发展具有重要意义。而工业4G路由器作为…

福州大学《嵌入式系统综合设计》实验四:边缘检测

一、实验目的 BMCV 提供了一套基于 Sophon AI 芯片优化的机器视觉库&#xff0c;通过利用芯片的 TPU 和 VPP模块&#xff0c;可以完成色彩空间转换、尺度变换、仿射变换、透射变换、线性变换、画框、JPEG 编解码、BASE64 编解码、NMS、排序、特征匹配等操作。 本实验的目的是…

C++中的内存管理

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2023年11月21日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&…

基于C#实现KMP算法

一、BF 算法 如果让你写字符串的模式匹配&#xff0c;你可能会很快的写出朴素的 bf 算法&#xff0c;至少问题是解决了&#xff0c;我想大家很清楚的知道它的时间复杂度为 O&#xff08;MN&#xff09;&#xff0c;原因很简单&#xff0c;主串和模式串失配的时候&#xff0c;我…

电脑便签工具推荐哪个?电脑上好用的便签软件使用哪一款

对于职场办公人士来讲&#xff0c;一款好用的电脑便签工具可以给日常工作带来极大的便利&#xff0c;如果您的日常工作离不开电脑工具&#xff0c;您就会知晓电脑便签工具在日常工作中的重要&#xff0c;电脑便签通常以一个小的窗口呈现在电脑桌面上&#xff0c;记录一些工作中…

KVM网络环境下vlan和trunk的理解

vmware exsi 平台&#xff0c;虚拟交换机管理界面的上行链路是什么意思 VMware ESXi中的虚拟交换机管理界面中的“上行链路”&#xff08;uplinks&#xff09;是指虚拟交换机连接到物理网络的物理网络适配器。在ESXi中&#xff0c;虚拟交换机&#xff08;vSwitch&#xff09;用…

JAXB:根据Java文件生成XML schema文件

说明 JAXB有个schemagen脚本&#xff0c;可以根据Java文件生成XML schema。这个工具在JAXB独立发布包中有&#xff0c;可以从官网下载JAXB的独立发布包&#xff1a; https://eclipse-ee4j.github.io/jaxb-ri/ 示例 使用schemagen -d <path> <java files>格式 …

安装rabbitMQ

安装rabbitMQ linux安装rabbitMQ centos7下 需要先安装JDK 安装Erlang 需对应版本 安装对应版本的rabbitMQ 参考&#xff1a;CentOS7安装RabbitMQ简单实用教程_普通网友的博客-CSDN博客 启动 systemctl start rabbitmq-server出现的问题 启动失败 Job for rabbitmq-ser…

顺序表和链表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

最新最全系列之Selenium:传入webdriver驱动的新方法 Service()函数;以前的executable_path报警告,即将弃用

传入webdriver驱动的新方法 Service()函数&#xff1b;以前的executable_path报警告&#xff0c;即将弃用 以前的方法 举例&#xff1a;webdriver.Chrome(executable_pathdriver_path)&#xff1b;看提示警告&#xff0c;提示该方法即将被弃用&#xff1b;如下图&#xff1a; …

mysql底层是如何存放数据的

总览 首先总的来说&#xff0c;分为四个层级&#xff0c;行页区段。行就是数据库里的一行数据。 但一次从磁盘读进内存的数据量是一页&#xff08;页是读写的单位&#xff0c;默认16KB一页&#xff09;&#xff0c;页分很多种类&#xff0c;例如数据页、溢出页、undo日志页。 …

工业领域的设备“监测”和“检测”有何区别?

在工业领域中&#xff0c;设备的监测和检测是关键的运维活动&#xff0c;它们在保障设备可靠性和生产效率方面发挥着重要作用。尽管这两个术语经常被人们混为一谈&#xff0c;但它们在含义和应用上存在一些关键区别。 "监测"与"检测"的概念 1. 监测&#…

使用wxPython和PyMuPDF合并PDF文档并自动复制到剪贴板

导语&#xff1a;处理大量的PDF文档可能会变得复杂和耗时。但是&#xff0c;使用Python编程和一些强大的库&#xff0c;如wxPython和PyMuPDF&#xff0c;可以使这个任务变得简单而高效。本文将详细解释一个示例代码&#xff0c;展示如何使用这些库来创建一个可以选择文件夹中的…

C#学习相关系列之Linq常用方法---排序(一)

一、构建数据 public class Student_1{public int ID { get; set; }public string Name { get; set; }public int Chinese { get; set; }public int Math { get; set; }public int English { get; set; }public override string ToString(){return string.Format("ID:{0},…

从零开始 通义千问大模型本地化到阿里云通义千问API调用

从零开始 通义千问大模型本地化到阿里云通义千问API调用 一、通义千问大模型介绍 何为“通义千问”&#xff1f; “通义千问大模型”是阿里云推出的一个超大规模的语言模型&#xff0c;具有强大的归纳和理解能力&#xff0c;可以处理各种自然语言处理任务&#xff0c;包括但…

springboot多环境配置

前言 在实际项目研发中&#xff0c;需要针对不同的运行环境&#xff0c;如开发环境、测试环境、生产环境等&#xff0c;每个运行环境的数据库…等配置都不相同&#xff0c;每次发布测试、更新生产都需要手动修改相关系统配置。这种方式特别麻烦&#xff0c;费时费力&#xff0…

ProtoBuf的使用

目录 1.创建.proto文件 1.1文件规范 1.2添加注释 1.3指定proto3语法 1.4package声明符 1.5定义消息(message) 1.6定义消息字段 2.编译contacts.proto文件 3.序列化与反序列化的使用 1.创建.proto文件 1.1文件规范 • 创建.proto文件时&#xff0c;⽂件命名应该使用全…

利用互斥锁解决缓存击穿问题

核心思路&#xff1a;相较于原来从缓存中查询不到数据后直接查询数据库而言&#xff0c;现在的方案是 进行查询之后&#xff0c;如果从缓存没有查询到数据&#xff0c;则进行互斥锁的获取&#xff0c;获取互斥锁后&#xff0c;判断是否获得到了锁&#xff0c;如果没有获得到&am…