java字符串常用方法day02

StringBuilder类

由于String是不变对象,每次修改内容都要创建新对象,因此String不适合做频繁修改操作.为了解决这个问题,java提供了StringBuilder类.

package string;/*** 频繁修改字符串带来的性能损耗.*/
public class StringDemo2 {public static void main(String[] args) {String str = "a";for(int i=0;i<10000000;i++){str = str + str;}System.out.println("执行完毕!");}
}

StringBuilder是专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的, 内部会自动扩容.修改速度和性能开销优异.并且提供了修改字符串的常见操作对应的方法:增删改插

package string;/*** java.lang.StringBuilder* 专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的,* 内部会自动扩容.修改速度和性能开销优异.并且提供了修改字符串的常见操作对应的方法:增删改插*/
public class StringBuilderDemo1 {public static void main(String[] args) {String str = "好好学习java";//内部默认表示一个空字符串
//        StringBuilder builder = new StringBuilder();//复制给定字符串到StringBuilder内部
//        StringBuilder builder = new StringBuilder(str);//不是线程安全的StringBuffer builder = new StringBuffer(str);//是线程安全的/*好好学习java好好学习java,为了找个好工作!append:追加内容*/builder.append(",为了找个好工作!");System.out.println(builder);//输出StringBuilder的内容//通过调用toString方法将StringBuilder内容以字符串形式返回.str = builder.toString();System.out.println(str);/*好好学习java,为了找个好工作!好好学习java,就是为了改变世界!replace:替换部分内容*/builder.replace(9,16,"就是为了改变世界");System.out.println(builder);/*好好学习java,就是为了改变世界!,就是为了改变世界!delete:删除部分内容*/builder.delete(0,8);System.out.println(builder);/*,就是为了改变世界!活着,就是为了改变世界!insert:插入操作*/builder.insert(0,"活着");System.out.println(builder);//翻转字符串builder.reverse();System.out.println(builder);}
}

StringBuffer 和StringBuilder

– StringBuffer是线程安全的,同步处理的,性能稍慢

–StringBuilder是非线程安全的,并发处理的,性能稍快

package string;/*** StringBuilder修改字符串的性能*/
public class StringBuilderDemo2 {public static void main(String[] args) {StringBuilder builder = new StringBuilder("a");for(int i=0;i<10000000;i++){builder.append("a");}System.out.println("执行完毕!");}
}

正则表达式

正则表达式是用来描述一个字符串的内容格式,使用它通常用来匹配一个字符串的内容是否符合格式要求.

基本语法

[]:表示一个字符,该字符可以是[]中指定的内容

例如:

预定义字符

.:"."表示任意一个字符,没有范围限制

\d:表示任意一个数字,等同于[0-9]

\w:表示任意一个单词字符,等同于a-zA-Z0-9_

\s:表示任意一个空白字符.

\D:表示不是数字

\W:不是单词字符

\S:不是空白字符

量词:
  • ?:表示前面的内容出现0-1次

    例如:

    abc? 可以匹配:a 或 b 或 c 或什么也不写

  • +:表示前面的内容出现1次以上

    abc+ 可以匹配:aaaaaaaaaa...或abcabcbabcbabcbabcbabbabab....

    但是不能匹配:什么都不写或abcfdfsbbaqbb34bbwer...

  • *:表示前面的内容出现任意次(0-多次)

    匹配内容与+一致,只是可以一次都不写.

  • {n}:表示前面的内容出现n次

    例如:

    abc{3} 可以匹配:aaa 或 bbb 或 aab

    不能匹配:aaaa或aad

  • {n,m}:表示前面的内容出现最少n次最多m次

    abc{3,5} 可以匹配:aaa 或 abcab 或者 abcc

    不能匹配:aaaaaa 或 aabbd

  • {n,}:表示前面的内容出现n次以上(含n次)

    abc{3,} 可以匹配:aaa 或 aaaaa.... 或 abcbabbcbabcbabcba....

    不能匹配:aa 或 abbdaw...

  • ()用于分组,是将括号内的内容看做是一个整体

    例如:

    (abc){3} 表示abc整体出现3次. 可以匹配abcabcabc.

    不能匹配aaa 或abcabc

    (abc|def){3}表示abc或def整体出现3次.

    可以匹配: abcabcabc 或 defdefdef 或 abcdefabc

String支持正则表达式的相关方法

matches方法

boolean matches(String regex)

使用给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true.否则返回false

package string;public class MatchesDemo {public static void main(String[] args) {/*邮箱的正则表达式用户名@域名fancq@tedu.cn[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+*/String mail = "fancq@tedu.cn";String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";boolean match = mail.matches(regex);if(match){System.out.println("是邮箱");}else{System.out.println("不是邮箱");}}
}
split方法

String[] split(String regex)

将当前字符串按照满足正则表达式的部分进行拆分,将拆分后的每部分以数组形式返回.

package string;import java.util.Arrays;public class SplitDemo {public static void main(String[] args) {String str = "abc123def456ghi";//按照数字部分拆分,获取其中每部分字母String[] arr = str.split("[0-9]+");System.out.println(arr.length);System.out.println(Arrays.toString(arr));str = "123,456,789,023";//拆分出所有的数字部分arr = str.split(",");System.out.println(Arrays.toString(arr));//如果连续遇到拆分项,则会拆分出一个空字符串.但是在字符串末尾连续遇到则忽略.str = ",,,123,,,456,789,023,,,,";//拆分出所有的数字部分arr = str.split(",");System.out.println(Arrays.toString(arr));str = "123.456.789.023";//拆分出所有的数字部分arr = str.split("\\.");//.在正则表达式中表示任意字符,要注意转意!System.out.println(Arrays.toString(arr));}
}
replaceAll方法

String replaceAll(String regex,String str)

将当前字符串中满足正则表达式的部分替换为给定内容

package string;public class ReplaceAllDemo {public static void main(String[] args) {String str = "abc123def456ghi";//将当前字符串中的数字部分替换为#NUMBER#str = str.replaceAll("[0-9]+","#NUMBER#");System.out.println(str);}
}

Object类

Object是所有类的顶级超类,其中有两个经常被子类重写的方法:

toString()与equals().

编写Point类进行测试
package object;import java.util.Objects;/*** 使用当前类测试超类Object中经常被子类重写的方法:equals与toString** Point类设计目的是表示直角坐标系中的一个点*/
public class Point {private int x;private int y;public Point(int x, int y) {this.x = x;this.y = y;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Point point = (Point) o;return x == point.x && y == point.y;}@Overridepublic int hashCode() {return Objects.hash(x, y);}@Overridepublic String toString() {return "Point{" +"x=" + x +", y=" + y +'}';}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}}

编写测试类

package object;public class TestPoint {public static void main(String[] args) {Point p = new Point(1,2);/*System.out.println(Object o)将给定对象toString方法返回返回的字符串输出到控制台toString方法是Object提供的方法,该方法默认返回的字符串为:类名@地址*/System.out.println(p);
//        System.out.println(p.toString());/*任何类型与字符串链接结果都是字符串这意味着链接的类型会被转为字符串再进行链接。其他类型是如何转换为String?就是依靠toString方法*/String line = "当前对象是:" + p;System.out.println(line);Point p2 = new Point(1,2);System.out.println("p2:"+p2);//==对于引用类型的意义是比较是否为同一个对象System.out.println(p==p2);//false  两个不同的对象//equals则是比较两个对象"像不像"(对象内容,特征是否一致)System.out.println(p.equals(p2));//true 两个对象的内容相同}
}

包装类

java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,使得基本类型可以通过包装类的实例以对象的形式存在.

  • 其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object
  • Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字类型.
package integer;public class IntegerDemo1 {public static void main(String[] args) {//基本类型转换为包装类int i = 123;//java推荐我们使用包装类的静态方法valueOf将基本类型转换为包装类,而不是直接newInteger i1 = Integer.valueOf(i);//Integer会重用-128-127之间的整数对象Integer i2 = Integer.valueOf(i);System.out.println(i1==i2);//trueSystem.out.println(i1.equals(i2));//truedouble dou = 123.123;Double dou1 = Double.valueOf(dou);//Double则是直接newDouble dou2 = Double.valueOf(dou);System.out.println(dou1==dou2);//falseSystem.out.println(dou1.equals(dou2));//true//包装类转换为基本类型int in = i1.intValue();//获取包装类对象中表示的基本类型值double doub = i1.doubleValue();System.out.println(in);//123System.out.println(doub);//123.0in = dou1.intValue();//大类型转小类型可能存在丢精度!doub = dou1.doubleValue();System.out.println(in);//123System.out.println(doub);//123.123}
}
包装类常用功能
package integer;public class IntegerDemo2 {public static void main(String[] args) {//1可以通过包装类获取其表示的基本类型的取值范围//获取int的最大值和最小值?int imax = Integer.MAX_VALUE;System.out.println(imax);int imin = Integer.MIN_VALUE;System.out.println(imin);long lmax = Long.MAX_VALUE;System.out.println(lmax);long lmin = Long.MIN_VALUE;System.out.println(lmin);/*2字符串转换为基本类型的前提是该字符串正确描述了基本类型可以保存的值,否则会抛出异常:NumberFormatException*/String str = "123";
//        String str = "123.123";//这个字符串不能解析为int值!int d = Integer.parseInt(str);System.out.println(d);//123double dou = Double.parseDouble(str);System.out.println(dou);//123.123}
}
自动拆装箱特性

JDK5之后推出了一个新的特性:自动拆装箱

该特性是编译器认可的.当编译器编译源代码时发现有基本类型和引用类型相互赋值使用时会自动补充代码来完成他们的转换工作,这个过程称为自动拆装箱.

package integer;public class IntegerDemo3 {public static void main(String[] args) {/*触发自动拆箱特性,编译器会补充代码将包装类转换为基本类型,下面的代码会变为:int i = new Integer(123).intValue();*/int i = new Integer(123);/*触发编译器自动装箱特性,代码会被编译器改为:Integer in = Integer.valueOf(123);*/Integer in = 123;}
}

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

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

相关文章

openGauss系新增市场份额达21.9%,跨越生态拐点

[中国&#xff0c;北京&#xff0c;2023年12月28日] 以“汇聚数据库创新力量&#xff0c;打造千行万业数据基石”为主题的openGauss Summit 2023在北京望京凯悦酒店举办。本次大会由国家工业信息安全发展研究中心软件所、中国软件行业协会、中国计算机学会数据库专业委员会指导…

DDL关于数据库和表操作的语法

1. DDL-数据库操作 &#xff08;1&#xff09;SHOW DATABASES ; (查看当前有哪些数据库 &#xff08;2&#xff09;CREATE DATABASES 数据库名; (创建数据库的语法 &#xff08;3&#xff09;USE 数据库名; (切换到某个数据库 &#xff08;4&#xff09;SEL…

safari缓存清理

safari缓存清理 点击顶端Safari浏览器–>点击偏好设置 点击隐私–>管理网站数据 全部移除

python系列教程218——生成器表达式

朋友们&#xff0c;如需转载请标明出处&#xff1a;https://blog.csdn.net/jiangjunshow 声明&#xff1a;在人工智能技术教学期间&#xff0c;不少学生向我提一些python相关的问题&#xff0c;所以为了让同学们掌握更多扩展知识更好地理解AI技术&#xff0c;我让助理负责分享…

python筛选数据库中表的数量

import pymysqldb pymysql.connect(host,port,user,password) cursor db.cursor()def get_table_list(in_db, in_table_name):"""获取数据库中的表数量"""sql fshow tables from {in_db};cursor.execute(sql)data cursor.fetchall()table_li…

C++qt-信号-信号槽

1、概念 信号和槽是两种函数&#xff0c;这是Qt在C基础上新增的特性&#xff0c;类似于其他技术中的回调的概念。 信号和槽通过程序员提前设定的“约定”&#xff0c;可以实现对象之间的通信&#xff0c;有两个先决的条件&#xff1a; 通信的对象必须都是从QObject类中派生出来…

3.C语言:函数与程序结构

Function 函数定义与声明外部变量与作用域头文件静态变量static寄存器变量程序块结构&#xff08;作用域&#xff09;初始化递归C预处理器 函数定义与声明 函数定义形式&#xff1a; 返回值类型函数明(参数声明表) {声明和语句 }函数定义中的各构成部分都可以省略。 不执行任…

数据库开发工具Navicat Premium 15 mac软件特色

Navicat Premium 15 mac版是一款数据库开发工具&#xff0c;Navicat Premium 15 Mac版可以让你以单一程序同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。 Navicat Premium mac软件特色 无缝数据迁移 数据传输&#xff0c;数据同步和结构同步…

婚恋/社交娱乐/同城相亲/红娘相亲交友软件开发小程序

需求分析&#xff1a;首先明确小程序的目标、功能和用户需求。确定小程序的主要功能&#xff0c;例如用户注册、登录、个人资料编辑、浏览其他用户资料、发送消息等。 技术选型&#xff1a;选择适合的开发框架和技术工具。在小程序开发中&#xff0c;可以使用微信小程序原生开…

电脑开启虚拟化如何查看自己的主机主板型号

问题描述 在使用virtualbox、vmware安装虚拟机的时候&#xff0c;需要本机电脑能够支持虚拟化。 但是不同厂家的主机&#xff08;主板&#xff09;幸好并不一致&#xff0c;所以需要先了解自己的电脑主板型号 操作方法 1、win r 键打开运行窗口&#xff0c;输入cmd并确定打开…

3D PDF查看器HOOPS Publish助力Smartscape拓展日本AEC市场!

​ 公司&#xff1a;Smartscape Co., Ltd. 行业&#xff1a;建筑、工程和施工(AEC) 软件&#xff1a;适用于AEC行业的3D PDF工具 软件开发工具包&#xff1a;Hoops Publish HOOPS_3D软件开发工具_HOOPS中文网慧都科技是HOOPS全套产品中国地区指定授权经销商&#xff0c;提供3D…

流畅芯视界 | 极海APM32F411 OLED驱动方案

随着技术的不断革新与进步&#xff0c;OLED显示技术以其在显示画质、设备厚度和能耗方面的显著表现&#xff0c;正在改变着人们的视觉体验。相较于传统液晶显示技术&#xff0c;OLED凭借更好的色彩表现力、更高对比度、以及能够实现更加轻薄的产品设计而日益受到消费者的青睐。…

zabbix部署

zabbix部署 部署zabbix服务被监测主机部署zabbix-agent2 使用版本 组件版本centos7.9zabbix5.0php7.2.24MariaDB5.5.68 部署zabbix服务 关闭防火墙和selinux [rootnode ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: …

Vue-8、Vue事件处理

1、点击事件 <!DOCTYPE html> <html lang"en" xmlns:v-model"http://www.w3.org/1999/xhtml" xmlns:v-bind"http://www.w3.org/1999/xhtml"xmlns:v-on"http://www.w3.org/1999/xhtml"> <head><meta charset&quo…

0108作业

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setWindowTitle("腾讯会议");this->resize(470,800);//设置界面大小this->setFixedSize(470,800);//锁定界面大小this->setStyleSheet("background-color:w…

信息系统安全——基于 AFL 的模糊测试

实验 3 基于 AFL 的模糊测试 3.1 实验名称 《基于 AFL 的模糊测试》 3.2 实验目 1 、熟悉模糊测试方法 2 、熟悉模糊测试工具 AFL 的使用 3.3 实验步骤及内容 1 、 安装 AFL 2 、 任意选择一个有源代码的样本 这里采用教材上一个包含栈溢出漏洞的样本。 3 、 结合源代码分析用 …

2024.1.8力扣每日一题——回旋镖的数量

2024.1.8 题目来源我的题解方法一 双层哈希表方法二 哈希表优化版 题目来源 力扣每日一题&#xff1b;题序&#xff1a;447 我的题解 方法一 双层哈希表 构造如下的哈希表&#xff1a;{节点i&#xff1a;{距离1&#xff1a;数量&#xff0c;…距离n&#xff1a;数量}} 相当于…

LinkedBlockingQueue原理探究

类图结构 同样首先看一下LinkedBlockingQueue的类图结构&#xff0c;以便从全局对LinkedBlockingQueue有个直观的了解。 由类图可以看到&#xff0c;LinkedBlockingQueue也是使用单向链表实现的&#xff0c;其也有两个Node,分别用来存放首、尾节点&#xff0c;并且还有一个初始…

Shell脚本入门实战:探索自动化任务与实用场景

引言 Shell脚本作为一种强大的自动化工具&#xff0c;在现代操作系统中具有广泛的应用。无论是简单的文件操作&#xff0c;还是复杂的系统管理&#xff0c;Shell脚本都能提供高效、快速的解决方案。在本文中&#xff0c;我们将探索Shell脚本的基础知识&#xff0c;并通过实战场…

x-cmd pkg | rg - 文本搜索工具,grep 命令的现代化替代品

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 rg&#xff08;ripgrep&#xff09; 是一个逐行方式进行&#xff08; line-oriented &#xff09;的文本搜索工具&#xff0c;能够递归搜索目录中的文件内容。默认情况下&#xff0c;rg 将遵守 .gitignore 文件规则自…