31、Java高级特性——Math类、Random类、String类、StringBuffer类、StringBuilder类

news2025/7/22 6:55:19

目录

一、Math类

1、Math类中的方法 

1.1  圆周率:PI

1.2   绝对值:abs()

1.3   返回最小近似值:ceil()

1.4  返回最大近似值

1.5  四舍五入:round() 

1.6  最大值和最小值:max()/min() 

1.7  求指定次幂 :pow()

1.8  随机数:random()

二、Random类 

1、Random类构造方法 

2、Random中的方法

3、代码演示

4、同种子 (参数相同)

三、String类

1、String类的常用方法

2、拼接字符串:concat(String string) 

3、字符串提取和查询

四、StringBuffer

1、StringBuffer类的构造方法

2、StringBuffer类常用方法

五、StringBuilder类

六、String类、StringBuffer类和StringBuilder类异同


一、Math类

Math类是被关键字final修饰的类,不能被继承

1、Math类中的方法 

Math类中的方法有很多,都是用于数学计算的,我们就随便看几个

1.1  圆周率:PI

public static void main(String[] args) {
		double pi = Math.PI;
		System.out.println("圆周率:"+pi);
	}

 

1.2   绝对值:abs()

public static void main(String[] args) {
		int num = Math.abs(-100);
		System.out.println("-100的绝对值为:"+num);
	}

1.3   返回最小近似值:ceil()

返回比参数大的最小整数

public static void main(String[] args) {
		double ceil = Math.ceil(9.2);
		System.out.println("9.2的近似值为:"+ceil);
	}

1.4  返回最大近似值

返回比参数小的最大整数

public static void main(String[] args) {
		double floor = Math.floor(9.2);
		System.out.println("近似值为:"+floor);
	}

1.5  四舍五入:round() 

public static void main(String[] args) {
		double round = Math.round(10.6);
		System.out.println("四舍五入:"+round);
	}

1.6  最大值和最小值:max()/min() 

public static void main(String[] args) {
		System.out.println(Math.max(108, 8));
		System.out.println(Math.min(108, 8));
	}

  

1.7  求指定次幂 :pow()

public static void main(String[] args) {
		System.out.println(Math.pow(2, 10));
	}

1.8  随机数:random()

 Math.random();返回一个[0.0,1.0]之间的double类型的数据

public static void main(String[] args) {
		double random01 = Math.random();
		System.out.println(random01);
	}

Math.random()*10;返回一个[0.0,10.0]之间的double类型的数据 

public static void main(String[] args) {
		double random02 = Math.random()*10;
		System.out.println(random02);
	}

(int)(Math.random()*10);返回[0.0,10.0]之间的int类型的数据

public static void main(String[] args) {
		int random03 = (int)(Math.random()*10);
		System.out.println(random03);
	}

(int)(Math.random()*(num2-num1)+num1);输出num1到num2之间的整数

lic class MathDemo {
	public static void main(String[] args) {
		//输出一个1-999之间的随机数
		int random04 = (int)(Math.random()*(998-1)+1);
		System.out.println(random04);
	}

二、Random类 

在java.util包中;

此类的实例用于生成伪随机数流,就是生成随机数

1、Random类构造方法 

2、Random中的方法

3、代码演示

public static void main(String[] args) {
		//创建Random类对象
		Random random = new Random();
		
		//获取int类型的随机数
		int num1 = random.nextInt();
		System.out.println("int类型随机数:"+num1);
		//产生的数可能性为int类型的取值范围
		
		//生成指定范围的随机数
		int num2 =  random.nextInt(10);
		System.out.println("0-10的随机数:"+num2);
		
		//随机boolean值
		System.out.println("随机boolean值:"+random.nextBoolean());
	}

4、同种子 (参数相同)

如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列。为了保证此属性的实现,为类 Random 指定了特定的算法。为了 Java 代码的完全可移植性,Java 实现必须让类 Random 使用此处所示的所有算法。但是允许 Random 类的子类使用其他算法,只要其符合所有方法的常规协定即可。

public static void main(String[] args) {
		//如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列
		Random r1 = new Random(100);
		Random r2 = new Random(100);
		System.out.println(r1.nextInt());
		System.out.println(r2.nextInt());
	}

三、String类

我们在前面已经对String类已经有过了解,今天我们看一下String类中常用方法

1、String类的常用方法

(1)获取字符串长度:length();

(2)获取指定索引的字符:charAt();

(3)字符串的比较:equals();

(4)字符串大写转小写:toLowerCase();

(5)字符串小写转大写:toUpperCase();

public static void main(String[] args) {
		//创建String类对象
		String str1 = new String("yfgtetwyubfuy");
		String str2 = "fhubuyfd";
		
		//获取字符串的长度:length()
		int lengthStr1 = str1.length();
		System.out.println("字符串str1的长度为:"+lengthStr1);
		int lengthStr2= str2.length();
		System.out.println("字符串str2的长度为:"+lengthStr2);
		System.out.println("**********************************************************");
		
		//获取指定索引的字符:charAt()
		char str1Char = str1.charAt(5);
		System.out.println("字符串str1的第六个字符是:"+str1Char);
		System.out.println("字符串str2的第三个字符是:"+str2.charAt(2));
		System.out.println("**********************************************************");
		
		//字符串的比较:equals()
		boolean result1 = str1.equals(str2);
		System.out.println("字符串str1与str2是否相同:"+result1);
		System.out.println("字符串str2是否与fhubuyfd相同:"+str2.equals("fhubuyfd"));
		System.out.println("**********************************************************");
		
		//字符串大写转小写:toLowerCase();
		String str3 = "JDIUGNRLasd";
		String str4 = str3.toLowerCase();
		System.out.println("将字符串str3转为小写为:"+str4);
		System.out.println("**********************************************************");
		
		//字符串小写转大写:toUpperCase();
		String str5 = "keriolkJUHNU";
		String str6 = str5.toUpperCase();
		System.out.println("将字符串str5转换大写:"+str6);
		System.out.println("**********************************************************");
	}

2、拼接字符串:concat(String string) 

第一种方式:

使用拼接符号"+"拼接

第二种方式:

使用concat(String string)方法

public static void main(String[] args) {
		String str1 = "qwerty";
		String str2 = "asdfghj";
		//使用"+"实现拼接
		//输出[q,w,e,r,t,y]
		for(int i = 0;i <str1.length();i++){
			if(i == 0){
				System.out.print("["+str1.charAt(i)+",");
			}else if(i > 0 && i <str1.length()-1){
				System.out.print(str1.charAt(i)+",");
			}else{
				System.out.println(str1.length()+"]");
			}
		}
		System.out.println("**********************************************************");
		//调用concat(String string)实现拼接
		String str3 = str1+"nfdiugnriun";
		System.out.println(str3);
		String str4 = str1.concat(str2);
		System.out.println(str4);
	}

public static void main(String[] args) {
		System.out.println(3+5+"hello");
		System.out.println(3+"hello"+5);
		System.out.println("hello"+3+5);
		System.out.println(3+""+5+"hello");
	}

程序不仅是从上到下执行,还要遵循从左到右执行 

3、字符串提取和查询

public static void main(String[] args) {
		String str1 = "pneumonoultramicroscopicsilicovolcanoconiosis";
		//返回第一个o出现的位置
		int numStr1 = str1.indexOf(111);
		System.out.println("o在str1中第一次出现的位置(索引):"+numStr1);
		System.out.println("**********************************************************");
		
		//返回最后一个o的索引
		int numStr2 = str1.lastIndexOf(111);
		System.out.println("o在str1中最后出现的位置(索引):"+numStr1);
		System.out.println("**********************************************************");
		
		//返回第一次出现字符串co的索引
		int numStr3 = str1.indexOf("co");
		System.out.println("co在str1中首次出现的位置:"+numStr3);
		System.out.println("**********************************************************");
		
		//返回最后一次出现字符串co的索引
		int numStr4 = str1.lastIndexOf("co");
		System.out.println("co在str1中最后一次出现的位置:"+numStr4);
		System.out.println("**********************************************************");
		
		//返回第十个字符后的所有字符
		String str2 = str1.substring(10);
		System.out.println("第十个字符后的字符串:"+str2);
		System.out.println("**********************************************************");
		
		//返回第2到第20个字符
		String str3 = str1.substring(1,20);
		System.out.println("第2到第20的字符串为:"+str3);
		System.out.println("**********************************************************");
		
		//去除字符串前后的空格
		String str4 = "   qwer df   ";
		String str5 = str4.trim();
		System.out.println("字符串str4去除空格后为"+str5);
		
	}

4、String类实用方法

 

public static void main(String[] args) {
		String str1 = "长亭外 古道边 芳草碧连天 晚风拂 柳笛声残 夕阳山外山";
		
		//String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串
		//按空格来拆分字符串,返回的是一个字符数组
		String[] strs1 = str1.split(" ");
		for(String string:strs1){
			System.out.println(string);
		}
		System.out.println("**********************************************************");
		
		//boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束
		String str2 = "qwertyuiop";
		boolean result1 = str2.endsWith("iop");
		System.out.println("字符串str2是否以iop结尾?"+result1);
		boolean result2 = str2.endsWith("iops");
		System.out.println("字符串str2是否以iops结尾?"+result2);
		System.out.println("**********************************************************");
		
		// boolean startsWith(String prefix,int toffset)测试此字符串从指定索引开始的子字符串是否以指定前缀开始
		String str3 = "asdfghjkl";
		boolean result3 = str3.startsWith("asd");
		System.out.println("字符串str3是否以asd开头:"+result3);
		boolean result4 = str3.startsWith("fgh",3);
		System.out.println("字符串str3是否第四位开始是以fgh开头:"+result4);
		System.out.println("**********************************************************");
		
		//byte[] getBytes()使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中
		String str4 = "zxcvbnm";
		byte[] bytes = str4.getBytes();
		for(byte strBytes:bytes){
			System.out.print(strBytes+"\t");
			System.out.println((char)strBytes);
		}
		System.out.println("**********************************************************");
		 
		//char[] toCharArray() 将此字符串转换为一个新的字符数组
		String str5 = "123456789";
		char[] chars = str5.toCharArray();
		for(char strChar:chars){
			System.out.print(strChar+"\t");
		}
	}

四、StringBuffer

StringBuffer类位于java.util包中,是String类的增强类。是线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。

1、StringBuffer类的构造方法

2、StringBuffer类常用方法

append(Type type):将字符串表示形式添加到序列

StringBuffer delete(int start, int end):移除此序列的子字符串中的字符

insert(int offset,Type type):插入

reverse():字符串反转

public static void main(String[] args) {
		//创建StringBuffer类对象
		StringBuffer sb01 = new StringBuffer("qwertyuiop");
		
		//append(Type type)将字符串表示形式添加到序列
		StringBuffer sb02 = sb01.append("asdfg");
		System.out.println("sb01:"+sb01);
		System.out.println("sb02:"+sb02);
		sb01.append(100);
		System.out.println("sb01:"+sb01);
		System.out.println("sb02:"+sb02);
		System.out.println("**********************************************************");
		
		// StringBuffer delete(int start, int end)移除此序列的子字符串中的字符。
		sb02.delete(2,5);
		System.out.println("sb01:"+sb01);
		System.out.println("sb02:"+sb02);
		System.out.println("**********************************************************");
		
		//insert(int offset,Type type)插入
		sb02.insert(3, 456);
		System.out.println("sb01:"+sb01);
		System.out.println("sb02:"+sb02);
		System.out.println("**********************************************************");
		
		//reverse():字符串反转
		sb01.reverse();
		System.out.println("sb01:"+sb01);
		System.out.println("sb02:"+sb02);
	}

五、StringBuilder类

(1)java.lang.StringBuilder是JDK 5.0版本新增的类,它是一个可变的字符序列。

(2)一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

StringBuilder 上的主要操作是 appendinsert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。

(3)使用StringBuilder类处理字符串的方法与StringBuffer类基本一样。

六、String类、StringBuffer类和StringBuilder类异同

(1)String类:字符串常量

 String是不可变的对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后指向新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响。

(2)StringBuffer类:字符串变量

StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下,推荐使用StringBuffer类。

(3)StringBuilder类:字符串变量

 JDK 5.0版本以后提供了StringBuilder类,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder类是单线程的,不提供同步,理论上效率更高。

 

 

 

 

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

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

相关文章

Java面向对象16:接口的定义与实现

普通类&#xff1a;只有具体的实现 抽象类&#xff1a;具体的实现和规范&#xff08;抽象方法&#xff09;都有 接口&#xff1a;只有规范&#xff01;自己无法写方法&#xff0c;专业的约束&#xff0c;约束和实现分离&#xff1a;面向接口编写&#xff08;大佬把接口定义好…

vue3 响应式 API 之 ref

ref 是最常用的一个响应式 API&#xff0c;它可以用来定义所有类型的数据&#xff0c;包括 Node 节点和组件。 没错&#xff0c;在 Vue 2 常用的 this.$refs.xxx 来取代 document.querySelector(‘.xxx’) 获取 Node 节点的方式&#xff0c;也是使用这个 API 来取代。 类型声明…

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统

[附源码]计算机毕业设计JAVA乒乓球俱乐部管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

我为什么将机器学习主力语言从Python转到Rust

我为什么将机器学习主力语言从Python转到Rust 文章目录写在前面Python的痛点猴子补丁(Monkey Patch)缺乏参数类型校验允许跨作用域访问运行缓慢太多隐含规则Rust之剑猴子补丁参数类型作用域运行速度隐含规则结论写在前面 首先要声明一下&#xff1a;Python依然是我最喜欢的编程…

S5PV210的启动过程

一、内存 SRAM 静态内存 特点就是容量小、价格高&#xff0c;优点是不需要软件初始化直接上电就能用。DRAM 动态内存 特点就是容量大、价格低&#xff0c;缺点就是上电后不能直接使用&#xff0c;需要软件初始化后才可以使用。 单片机中&#xff1a;内存需求量小&#xff0c;而…

SpringBoot SpringBoot 开发实用篇 6 监控 6.7 自定义端点

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.7 自定义端点6.7.1 问题引入6.7.2 自定义端点6.7.3 小结6.7.…

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕

20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕 2022/11/25 19:07 01 obs.png obs studio &#xff08;64bit&#xff09; 02 obs 设置.png 03 obs 输出.png 04 obs默认为MKV.png 05 obs改mkv为MP4.png 警告&#xff1a;如果文件无法完成&#xff08;例如&…

供应Alkyne-PEG-Biotin,Alk-PEG-Biotin,炔烃-聚乙二醇-生物素

炔烃-聚乙二醇-生物素是一种化学PEG试剂其英文名为Alkyne-PEG-Biotin&#xff08;Alk-PEG-Biotin&#xff09;&#xff0c;它所属分类为Alkyne PEG Biotin PEG。 peg试剂的分子量均可定制&#xff0c;有&#xff1a;生物素-聚乙二醇5-炔烃、生物素-PEG 20-炔烃 、Biotin-PEG 2…

【kafka】九、kafka消费者分区分配策略

消费者分区分配策略 分区分配策略 一个consumer group中有个多个topic&#xff0c;一个topic有多个partition&#xff0c;所以必然会涉及到partition的分配问题&#xff0c;即确定哪个partition由哪个消费者进行消费。 kafka有两种分配策略&#xff0c;RoundRobin和Range Ro…

JAVA实训第三天

目录 方法引用 示例 接口 类 测试类 Stream ​编辑 Stream 的操作三个步骤 创建 Stream 的 4 种方法 常见Stream接口的继承关系 Stream的中间操作 中间操作常用方法 Stream的终止操作 Stream的终止操作-collect() 示例代码演示 作业 方法引用 在Lamda新特性的支持下&…

电商商家速看 这些TikTok选品玩法你知道多少?

调查报告显示&#xff0c;有3成的商家在TiTok平台上运营电商&#xff0c;谋求TikTok变现增长。在海内外文化习惯、市场环境存在较大差异的情况下&#xff0c;如何 TikTok选品是他们的主要困难。李先生是具有丰富经验的TikTok电商商家&#xff0c;他表示想要实现TikTok变现增长&…

【RuoYi-Vue-Plus】学习笔记 44 - XSS 过滤器以及 @Xss 注解简单分析

文章目录前言参考目录关于 XSS 攻击框架集成配置说明测试方法一&#xff1a;通过过滤器测试方法二&#xff1a;通过 Xss 注解功能调用流程分析XSS 过滤器启动初始化Form 表单请求过滤JSON 对象请求过滤Xss 注解校验前言 之前在对接口进行传参时发现富文本包含的标签全部被过滤…

成功解决 java.lang.NumberFormatException

急于查看问题原因的小伙伴&#xff0c;直接跳到 问题原因 标题。 问题背景&#xff1a; 今天在写条件查询时遇到这么一个错&#xff1a; ### Error querying databasecause: java.lang.NumberFormatException: For input string: "M ### Cause: iava.lang.NumberFormatE…

Ros驱动Ur5e过程 | 手把手教程 | Ros驱动真实机器人Ur5e | Ros与Ur5e建立通讯 | Ubuntu20.04驱动Ur5e机器人

目录 UR5e连接过程 安装ROS 安装moveit 电脑端UR机器人驱动安装 UR实体机器人-软件安装与通信建立 urcap软件安装 电脑端ip问题 需要指定临时ip的情况 不需指定临时ip UR机器人IP 机器人的启动 驱动UR机器人 电脑-ip : 192.168.56.1 ur5e-ip &#xff1a;192.168.5…

【STM32CubeMX】NRF24L01模块实现“1对1“及“1对多“无线通信

大家好&#xff0c;我是小政。本篇文章我将针对NRF24L01模块实现"1对1"及"1对多"无线通信的STM32CubeMX配置过程进行详细的讲解&#xff0c;让准备学习HAL库的小伙伴能够更好的理解STM32CubeMX如何配置。 NRF24L01模块实现"1对1"及"1对多&q…

【OpenCV-Python】教程:3-9 轮廓(5)轮廓层级

OpenCV Python 轮廓层次 【目标】 学习轮廓的层次关系 在前几个课程里面&#xff0c;学习了 cv2.findContours() 函数, 传递了参数 Contour Retrieval Mode . 通常是 cv.RETR_LIST or cv.RETR_TREE 工作的很好&#xff0c;但是他们是什么意思呢&#xff1f; hierarchy 到底是…

基于DMF推荐算法的推荐系统 代码+数据 (可作为毕设)

案例知识点 推荐系统任务描述:通过用户的历史行为(比如浏览记录、购买记录等等)准确的预测出用户未来的行为;好的推荐系统不仅如此,而且能够拓展用户的视野,帮助他们发现可能感兴趣的却不容易发现的item;同时将埋没在长尾中的好商品推荐给可能感兴趣的用户。DMF推荐方法…

C语言既然可以自动为变量分配内存,为什么还要用动态分配内存呢?

一、前言 不知道大家在学习C语言动态分配内存的时候有没有过这样的疑问&#xff0c;既然系统可以自动帮我们分配内存&#xff0c;为什么还需要我们程序员自己去分配内存呢&#xff1f; 如果想要弄清楚这些问题&#xff0c;我们首先就要了解静态内存和动态内存有什么区别&…

python学习笔记

第一个python程序 pycharm使用 pycharm下载链接&#xff1a; https://www.jetbrains.com/zh-cn/pycharm/download/#sectionwindows 1. 新建项目 右键test—> 点击new 输入文件名 运行 结果 2. 调节字体大小快捷键设置 右键添加鼠标快捷键 按住ctrl鼠标向上滑动 放…

计算机网络 应用层

概述 为特定应用程序提供数据服务&#xff0c;例如HTTP、FTP(File Transfer Protocol , 文件传输协议)、DNS &#xff08;Domain Name System,域名系统&#xff09;等。 域名系统 DNS DNS 全名叫 Domain Name Server&#xff0c;中文俗称“域名服务器” 在 Internet 上域名…