当前位置: 首页 > news >正文

JAVA基础:正则表达式,String的intern方法,StringBuilder可变字符串特点与应用,+连接字符串特点

1 String中的常用方法2

1.1 split方法

  • 将字符串按照指定的内容进行分割,将分割成的每一个子部分组成一个数组

    分割内容不会出现在数组中

  • 实际上该方法不是按照指定的简单的符号进行分割的,而是按照正则表达式进行分割

1.2 正则表达式

  • 用简单的符号组合表示更为复杂的字符串内容

  • 可以对某一个字符串进行内容检测(看看目标字符串是否包含正则所表示的那部分子串内容)

  • 检测成功后,可以根据需求作进一步的处理,包括:替换,分割等

  • 在String字符串中提供了下面几个与正则相关的方法

    1. s.matches("\\d"); 全串检测

    2. s.split("\\d"); 拆分

    3. s.replaceAll("\\d","A"); 替换

符号表示

  • a 要求字符串中包含一个字母a

  • ab 要求字符串中包含ab这样一组连续的字符

  • a|b 要求字符串中包含a或b字母

  • [^abcd]要求字符串中包含abcd中至少一个

  • (ab)|(cd) 要求字符串中包ab或cd组合中的一个

  • [a-z]

  • [A-Z]

  • [0-9]

  • [a-zA-Z0-9]

  • \d 表示所有所有数字 [0-9]

  • \w 表示所有字符

  • \s 表示空格

  • \D \W \S 表示除xx以外

  • . 表示所有符号

注意1: \d中的\是正则表达式中的转义,我们现在要在java程序中,需要再增加一个\ \\d

注意2: 在正则中.表示所有符号。如果我们就像表示.这个符号 ,需要对.进行转义 \\.

数量表示

  • a{2} 表示字符串中包含两个连续的a

  • a{,3}表示字符串中包含最多3个连续的a , a, aa , aaa

  • a{1,}表示字符串中包含至少1个连续的a

  • a{1,3}表示字符串中包含1到3个连续的a

  • a+ 表示字符串中至少包含1个连续的a

  • a*表示字符串中包含0或多个a

  • a?表示字符串中包含0或1个a

public static void main(String[] args) {
//        String reg = "((139)|(136)|(171)|(196))\\d{8}" ;
//        String s = "13613640262" ;
//        System.out.println(s.matches(reg));
//        if(s.startsWith("139") || s.startsWith("136")||s.startsWith("137")  && s.length() == 11)//        a@qq.com
//        String reg = "([0-9a-zA-Z].*)@((qq)|(163)|(sina))\\.((com)|(cn))" ;
//        String s = "aaa@126.com";
//        System.out.println(s.matches(reg));String reg = "(136)|(137)|(138)" ;String s = "a136b137c138d" ;String abc = s.replaceAll(reg, "ABC");System.out.println(abc);}

1.3 intern方法

  • 使用""方式常见的字符串对象,会在堆的常量区中开辟存储空间。并且只会保留一份

  • intern方法的作用是将使用new关键字创建的字符串对象(地址),尝试从堆区移动到常量区

 

public static void main(String[] args) {
//        String s1 = new String(new char[]{'a','b','c'});
//        String s2 = "abc" ;
//        System.out.println(s1 == s2);//        String s1 = new String(new char[]{'a','b','c'});
//        s1.intern();
//        String s2 = "abc" ;
//        System.out.println(s1 == s2);//        String s1 = new String("abc");
//        s1.intern();
//        String s2 = "abc" ;
//        System.out.println(s1 == s2);//        String s1 = new String(new char[]{'j','a','v','a'});
//        s1.intern() ;
//        String s2 = "java" ;
//        System.out.println(s1 == s2);
}

2 StringBuilder可变字符串

  • 可变字符串有两个, StringBuilder 和 StringBuffer

  • 两个类有相同的api

  • StringBuffer是一个早期版本的可变字符串,线程同步,安全性高,性能较低

  • StringBuilder是一个新版本的可变字符串,非线程同步,安全性较低,性能较高

2.1 创建StringBuilder对象

  • 只有一种创建手段,使用new + 构造方法

StringBuilder s = new StringBuilder(); //创建了没有任何内容的可变字符串对象
StringBuilder s = new StringBuilder("ab");//创建了一个有初始内容的可变字符串对象//也可以理解成将String转换成了StringBuilder
StringBuilder s = new StringBuilder(10);//创建了一个没有任何内容的可变字符串//但指定了内部字符数组的容量//这个容量默认是16个

 

2.2 StringBuilder字符串的可变特性

  • String字符串的不可变原因

    1. 用来存储字符串内容的数组变量使用final修饰,不能再指向其他长度的字符数组地址,长度不可变

    2. 从封装设计角度,String没有对外提供可以改变字符数组内容的方法,所以内容无法改变

  • StringBuilder字符串可变的原因

    1. 用来存储字符串内容的数组变量没有使用final修饰,可以指向长度更长的字符数组(扩容)

    2. 从封装设计角度而言,StringBuilder对外提供了可以直接更改字符数组内容的方法

      append , insert , delete

2.3 StringBuilder常用方法

public static void main(String[] args) {StringBuilder s = new StringBuilder();s.append("a");  //字符串结尾追加新内容s.append("bc");s.append("def") ;System.out.println(s);System.out.println("-----------------");s.insert(2,"g"); //在字符串的指定位置插入新内容System.out.println(s);System.out.println("------------------");s.delete(1,4) ; //删除指定位置范围内的内容 左闭右开System.out.println(s);System.out.println("-----------------");s.replace(1,3,"xyz"); //替换指定位置范围内的内容,左闭右开System.out.println(s);System.out.println("--------------------");s.reverse(); //反转字符串内容 System.out.println(s);String ss = s.toString() //将StringBuilder转换换成String对象,可以使用String的方法了}

3 String字符串连接

  • 有两种方式

    1. 使用+连接两个字符串

      "abc" + "bcd"

    2. 使用concat方法连接两个字符串

      "abc".concat("bcd")

  • 使用concat方法连接字符串,没有特别之处,底层产生了一个新的字符串对象,包含两个子串内容

  • 使用+号连接字符串,这里涉及一个 + 运算符重载特点

    在使用+号连接字符串时,会先产生一个StringBuilder对象,利用StringBuilder的append方法完成字符串的追加(连接)

    将连接后的完整内容,形成一个String对象返回

注意:

  1. 当需要一次性大量的连接多个字符串时,建议使用+号连接

  2. 当只需要连接两个字符串时,建议使用concat方法连接

String s1 = "abc" ;
String s2 = "bcd" ;
String s3 = s1 + s2 ;

 

注意:

  • 多个字符串常量使用+号连接时,不会产生StringBuilder。而是在编译期就直接将字符串合并了

  • 编译期会对常量值做优化

public static void main(String[] args) {String s1 = "abc" + "def" ;String s2 = "abcdef" ;System.out.println(s1 == s2);
}

 

public static void main(String[] args) {String s1 = "abc"  ;String s2 = "def" ;String s3 = s1 + s2 ;String s4 = "abcdef" ;System.out.println(s3 == s4);
}

 

public static void main(String[] args) {fina String s1 = "abc"  ;final String s2 = "def" ;String s3 = s1 + s2 ;String s4 = "abcdef" ;System.out.println(s3 == s4);
}

相关文章:

JAVA基础:正则表达式,String的intern方法,StringBuilder可变字符串特点与应用,+连接字符串特点

1 String中的常用方法2 1.1 split方法 将字符串按照指定的内容进行分割,将分割成的每一个子部分组成一个数组 分割内容不会出现在数组中 实际上该方法不是按照指定的简单的符号进行分割的,而是按照正则表达式进行分割 1.2 正则表达式 用简单的符号组合…...

前端接口报错302 [已解决]

前端接口报错302 [已解决] 在前端开发中,与后端接口的交互是项目成功的关键。然而,遇到如302这样的状态码报错时,可能会让开发者感到困惑。本文将通过详细解析和多个代码案例,帮助你深入理解前端接口报错302,并提供有效…...

【网络安全】利用未授权API接口实现创建Support Ticket

未经许可,不得转载。 文章目录 正文目标为一个技术平台,客户可以通过该平台预订不同类型的服务。 正文 redacted.com 是主域,但所有流量都通过 api.redacted.com。我过去曾使用该公司预订了一些服务,因此我的帐户中有预订历史。 我对我的订单开具了 Support Ticket,此时…...

气压高度加误差的两种方法(直接添加 vs 换算到气压误差),附MATLAB程序

在已知高度真实值时,如果需要计算此高度下的气压计误差,可考虑本文所述的两种方法 气压高度 气压与高度之间的关系可以用大气压的垂直变化来描述。随着高度的增加,气压通常会下降。这是因为空气的密度在高度增加时减少,导致上方空气柱对下方空气施加的压力减小。 主要关系…...

Word 制作会议名牌教程

文章目录 Part.I IntroductionPart.II 制作步骤 Part.I Introduction 本文详细介绍了如何用 Word 制作会议名牌,附有笔者制作好的一个成品(戳我下载~)。 下面是一些常识 会议名牌尺寸:100mm 180mm Part.II 制作步骤 1、新建文…...

浮动静态路由

浮动静态路由 首先我们知道静态路由的默认优先级是60&#xff0c;然后手动添加一条静态路由优先级为80的路由作为备份路由。当主路由失效的备份路由就会启动。 一、拓扑图 二、基本配置 1.R1: <Huawei>system-view [Huawei]sysname R1 [R1]interface GigabitEthernet…...

JavaWeb初阶 day1

目录 tomcat目录结构 tomcat:web服务器软件 项目部署的方式 直接将项目放到webapps下 配置conf/server.xml文件 在conf\Catalina\localhost创建任意名称的xml文件。在文件中编写 静态项目和动态项目 Servlet Servlet执行原理 Servlet方法&#xff08;生命周期&#x…...

OpenAPI鉴权(二)jwt鉴权

一、思路 前端调用后端可以使用jwt鉴权&#xff1b;调用三方接口也可以使用jwt鉴权。对接多个三方则与每个third parth都约定一套token规则&#xff0c;因为如果使用同一套token&#xff0c;token串用可能造成权限越界问题&#xff0c;且payload交叉业务不够清晰。下面的demo包…...

【Rust练习】16.模式

文章题目来自&#xff1a;https://practice-zh.course.rs/pattern-match/patterns.html 1 &#x1f31f;&#x1f31f; 使用 | 可以匹配多个值, 而使用 … 可以匹配一个闭区间的数值序列 fn main() {} fn match_number(n: i32) {match n {// 匹配一个单独的值1 > println!(…...

深度学习(4):torch.nn.Module

文章目录 一、是什么二、nn.Module 的核心功能三、nn.Module 的基本用法1. 定义自定义模型2. 初始化模型3. 模型的使用 四、nn.Module 的关键特性1. 自动注册子模块和参数2. forward 方法3. 不需要定义反向传播 五、常用的内置模块六、示例&#xff1a;创建一个简单的神经网络1…...

(14)关于docker如何通过防火墙做策略限制

关于docker如何通过防火墙做策略限制 1、iptables相关问题 在Iptables防火墙中包含四种常见的表&#xff0c;分别是filter、nat、mangle、raw。 filter&#xff1a;负责过滤数据包。 filter表可以管理INPUT、OUTPUT、FORWARD链。 nat&#xff1a;用于网络地址转换。 nat表…...

新React开发人员应该如何思考

React是一个用于构建用户界面的流行JavaScript库&#xff0c;通过使开发人员能够创建可重用组件并有效管理复杂的UI&#xff0c;彻底改变了前端开发。然而&#xff0c;采用正确的心态对于新开发人员驾驭React独特的范式至关重要。让我们来探索塑造“React思维模式”的基本原则和…...

解密.bixi、.baxia勒索病毒:如何安全恢复被加密数据

导言 在数字化时代&#xff0c;数据安全已成为个人和企业面临的重大挑战之一。随着网络攻击手段的不断演进&#xff0c;勒索病毒的出现尤为引人关注。其中&#xff0c;.bixi、.baxia勒索病毒是一种新型的恶意软件&#xff0c;它通过加密用户的重要文件&#xff0c;迫使受害者支…...

开源 AI 智能名片与 S2B2C 商城小程序:嫁接权威实现信任与增长

摘要&#xff1a;本文探讨了嫁接权威在产品营销中的重要性&#xff0c;并结合开源 AI 智能名片与 S2B2C 商城小程序&#xff0c;阐述了如何通过与权威关联来建立客户信任&#xff0c;提升产品竞争力。强调了在当今商业环境中&#xff0c;巧妙运用嫁接权威的方法&#xff0c;能够…...

S-Clustr-Simple 飞机大战:骇入现实的建筑灯光游戏

项目地址:https://github.com/MartinxMax/S-Clustr/releases Video https://www.youtube.com/watch?vr3JIZY1olro 飞机大战 按键操作: ←:向左移动 →:向右移动 Space:发射子弹 这是一个影子集群的游戏插件&#xff0c;可以将游戏画面映射到现实的设备&#xff0c;允许恶…...

MySQL:存储引擎简介和库的基本操作

目录 一、存储引擎 1、什么是存储引擎&#xff1f; 2、存储引擎的分类 关系型数据库存储引擎&#xff1a; 非关系型数据库存储引擎&#xff1a; 分布式数据库存储引擎&#xff1a; 3、常用的存储引擎及优缺点 1、InnoDb存储引擎 2、MyISAM存储引擎 3、MEMORY存储引擎 …...

JavaScript类型判断(总结)

1. 使用typeof操作符 typeof操作符可以返回一个值的类型的字符串表示。例如&#xff1a; typeof 42; // "number" typeof "Hello"; // "string" typeof true; // "boolean" typeof undefined; // "undefined" typeof null…...

SpringBoot之登录校验关于JWT、Filter、interceptor、异常处理的使用

什么是登录校验&#xff1f; 所谓登录校验&#xff0c;指的是我们在服务器端接收到浏览器发送过来的请求之后&#xff0c;首先我们要对请求进行校验。先要校验一下用户登录了没有&#xff0c;如果用户已经登录了&#xff0c;就直接执行对应的业务操作就可以了&#xff1b;如果用…...

我的AI工具箱Tauri版-FunAsr音频转文本

本教程基于自研的AI工具箱Tauri版进行FunAsr音频转文本服务。 FunAsr音频转文本服务 是自研AI工具箱Tauri版中的一个高效模块&#xff0c;专为将音频或视频中的语音内容自动转化为文本或字幕而设计。用户只需简单配置输入、输出路径&#xff0c;即可通过FunAsr工具快速批量处理…...

C++:模版初阶

目录 一、泛型编程 二、函数模版 概念 格式 原理 实例化 模版参数的匹配原则 三、类模版 定义格式 实例化 一、泛型编程 如何实现一个通用的交换函数呢&#xff1f; void Swap(int& left, int& right) {int temp left;left right;right temp; } void Swa…...

Phi-3-mini-4k-instruct-gguf实战案例:用q4-GGUF模型实现10秒内短文本生成

Phi-3-mini-4k-instruct-gguf实战案例&#xff1a;用q4-GGUF模型实现10秒内短文本生成 1. 模型简介 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个经过优化的模型特别适合处理问答、文本改写、摘要整理和简短创作等任务。 与完整版Phi-3…...

终极指南:如何在TensorFlow Rust中掌握while_loop循环结构

终极指南&#xff1a;如何在TensorFlow Rust中掌握while_loop循环结构 【免费下载链接】rust Rust language bindings for TensorFlow 项目地址: https://gitcode.com/gh_mirrors/rust/rust TensorFlow Rust是Rust语言与TensorFlow深度学习框架的绑定库&#xff0c;它允…...

技术赋能B端拓客:号码核验行业的迭代与价值升级,氪迹科技法人股东号码核验系统,阶梯式价格

2026年&#xff0c;B端市场竞争进入白热化阶段&#xff0c;拓客逻辑已从“规模扩张”转向“价值深耕”&#xff0c;“精准、高效、低成本”成为所有拓客团队的核心追求。号码核验作为B端拓客的前置基础性环节&#xff0c;其服务质量直接决定线索价值、人力效能与投入回报比&…...

OFA-VE开源多模态分析系统:GPU算力优化部署实操手册

OFA-VE开源多模态分析系统&#xff1a;GPU算力优化部署实操手册 1. 系统概述与核心价值 OFA-VE是一个基于阿里巴巴达摩院OFA大模型构建的多模态推理平台&#xff0c;专门用于分析图像内容与文本描述之间的逻辑关系。这个系统不仅能看懂图片内容&#xff0c;还能理解文字描述&…...

FastAPI ORM 封装:FastAPI 与 SQLModel 的无缝集成与快速开发

更多内容请见: 《Python Web项目集锦》 - 专栏介绍和目录 核心价值: SQLModel 是 FastAPI 作者 Tiangolo 为 Python Web 开发量身打造的"ORM 终极解决方案",它将 Pydantic 模型与 SQLAlchemy 深度融合,让开发者在编写 API 时无需在数据库模型和 API 模型之间反复…...

SecGPT-14B开源大模型部署:CSDN平台内开箱即用,省去HuggingFace下载环节

SecGPT-14B开源大模型部署&#xff1a;CSDN平台内开箱即用&#xff0c;省去HuggingFace下载环节 想快速体验一个专注于网络安全问答的14B大模型&#xff0c;但又不想经历从HuggingFace下载几十GB模型文件的漫长等待和复杂配置&#xff1f;现在&#xff0c;在CSDN星图平台上&am…...

OpenClaw自动化周报:Qwen3.5-9B解读工作截图生成总结

OpenClaw自动化周报&#xff1a;Qwen3.5-9B解读工作截图生成总结 1. 为什么需要自动化周报 每周五下午&#xff0c;我都会陷入一种"周报焦虑"——电脑桌面上堆满了会议截图、临时记录的txt文件、微信里的零散对话。手动整理这些碎片信息需要3-4个小时&#xff0c;常…...

通过配置驱动前端页面的实现方法

通过配置驱动前端页面的实现方法 配置驱动开发&#xff08;Configuration-Driven Development, CDD&#xff09;是一种通过外部配置而非硬编码来控制应用行为的开发模式。在前端领域&#xff0c;这种模式可以显著提升页面灵活性和可维护性。以下是具体实现方案&#xff1a; 理解…...

一文了解嵌入式硬件通信核心:串口/CAN/以太网,底层逻辑居然全一样!

做嵌入式、工控、硬件通信开发久了&#xff0c;总会有一个突然顿悟的瞬间&#xff1a;串口、以太网、CAN、TCP、USB、蓝牙、Modbus……这些看似毫无关联、应用场景天差地别的通信方式&#xff0c;扒开底层逻辑才发现&#xff0c;居然是同一个模子刻出来的。看透这一点后&#x…...

GME-Qwen2-VL-2B自动化测试:基于模型视觉理解的GUI界面测试脚本

GME-Qwen2-VL-2B自动化测试&#xff1a;基于模型视觉理解的GUI界面测试脚本 1. 引言 你有没有遇到过这样的场景&#xff1f;辛辛苦苦写了一套UI自动化测试脚本&#xff0c;结果软件界面稍微改个按钮颜色、挪个位置&#xff0c;整个测试就全挂了。维护成本高得吓人&#xff0c…...