Java-Day06 Java中的几个内置类(对象):Math类、Random类、Scanner类、String类(字符串对象)超详细

目录

1. Math类

扩展知识:Java如何定义常量

1. 两个属性:

2. 常见方法:

2. Random类

2.1 常见方法

2.2 如何获取随机数

1. 使用Math.random()获取

2. 使用java.util.Random类获取

3. Scanner类

常用方法

4. String类(字符串对象)

常见的字符串方法


Java的核心库提供了大量的现成的类供我们使用。本篇文章我们介绍几个常用的工具类。

1. Math类

Java提供用来处理和计算复杂数学运算的类,Math

Math类被final修饰,无法修改和继承。

查帮助文档:Overview (Java SE 17 & JDK 17)

扩展知识:Java如何定义常量

使用final关键字,被final修饰,无法修改和继承。

       如果是常量定义,建议使用public static同时修饰。常量的命名规范是所有字母都大写,如果多个单词使用下划线_隔(例如:JAVA_HOME)

public class MathTest {
    public static void main(String[] args) {
        // 定义常量
        final int A = 1;
        // A = 20; // 错误: 无法为最终变量A分配值
        
    }
}

Math类中常见属性和方法:

1. 两个属性:

Math.PI:圆周率,double值比任何其他的更接近 pi ,圆周长与其直径的比率。

Math.E:自然对数的基数,double值比其他任何一个都更接近 e

2. 常见方法:

Math类,它提供了大量的静态方法来便于我们实现数学计算

Math.abs(num):返回num(可以是double、float、int、long类型)值的绝对值

Math.cbrt(double a):对a开立方根,返回值是double类型的

Math.ceil(double a):对a向上取整,返回值是double类型的

Math.floor(double a):对a向下取整,返回值是double类型的

Math.round(float a):对a四舍五入,返回值是int类型的

Math.round(double a):对a四舍五入,返回值是long类型的

Math.pow(double a, double b):a的b次方,a^b,幂次方,返回值是double类型的

Math.sqrt(double a):对a开平方根,返回值是double类型的

Math.random():获取一个[0, 1)之间的随机数

Math.max(a, b):返回a, b中的较大值,a,b可以是double/float/int/long等类型的数据

Math.min(a, b):返回a, b中的较小值,a,b可以是double/float/int/long等类型的数据

Math.exp(double a):计算 e^x 次方,返回值是double类型的

Math.log(double a):计算以e为底的对数,返回值是double类型的

Math.log10(double a):计算以10为底的对数,返回值是double类型的

public class MathTest {
    public static void main(String[] args) {
        // 定义常量
        final int A = 1;
        System.out.println(A); // 1
        // A = 20; // 错误: 无法为最终变量A分配值

        // 两个常量
        System.out.println(Math.E); // 2.718281828459045
        System.out.println(Math.PI); // 3.141592653589793
        // 求绝对值
        System.out.println(Math.abs(-2)); // 2
        // 开立方根
        System.out.println(Math.cbrt(8)); // 2.0
        // 向上取整
        System.out.println(Math.ceil(12.3)); // 13.0
        System.out.println(Math.ceil(-12.3)); // -12.0
        // 向下取整
        System.out.println(Math.floor(3.2)); // 3.0
        // 四舍五入,float返回int,double返回long
        System.out.println(Math.round(8.3F)); // 8
        System.out.println(Math.round(8.3)); // 8
        // a的b次方,a^b,幂次方,返回值是double类型的
        System.out.println(Math.pow(2,3)); // 8.0
        // 对a开平方根,返回值是double类型的
        System.out.println(Math.sqrt(16)); // 4.0
        // 获取一个[0, 1)之间的随机数
        System.out.println(Math.random()); // 0.3711479414337572
        // 获取一个[0, 10)之间的随机整数
        System.out.println((int)(Math.random() * 10));
        // 返回a, b中的较大值
        System.out.println(Math.max(2, 5)); // 5
        // 返回a, b中的较小值
        System.out.println(Math.min(2.5, 5.2)); // 2.5
        // 计算额e^x次方
        System.out.println(Math.exp(10)); // 22026
        // 计算以e为底的对数
        System.out.println(Math.log(10)); // 2.3
        // 计算以10为底的对数,返回的是double
        System.out.println(Math.log10(100)); // 2.0
        
        // 三角函数
        System.out.println(Math.sin(3.14)); // 0.00159...
        System.out.println(Math.cos(3.14)); // -0.9999...
        System.out.println(Math.tan(3.14)); // -0.0015...
        System.out.println(Math.asin(1.0)); // 1.57079...
        System.out.println(Math.acos(1.0)); // 0.0
    }
}

2. Random类

用来创建伪随机数。所谓伪随机数,是指只要给定一个初始的种子,产生的随机数序列是完全一样的。计算机中的随机数都是伪随机数

Random random = new Random([long 类型参数]);

2.1 常见方法

protected int next​(int bits):生成下一个伪随机数。(注意protected,直接调用不了的

boolean nextBoolean():生成一个boolean随机数

void nextBytes(byte[] bytes):生成随机字节并将其放入用户提供的字节数组中  

double nextDouble():生成一个double随机数,介于0.0和1.0之间的均匀分布的值。

float nextFloat():生成一个float随机数,介于0.0和1.0之间的均匀分布的值。

double nextGaussian():返回高斯(“正态”)分布双精度值,与该随机数生成器的序列的μ = 0.0, σ2=1.0的高斯(“正态”)分布双精度值。  

int nextInt():生成一个int随机数  

int nextInt(int bound):生成一个int随机数:[0,10) 

long nextLong():生成一个long随机数    

void setSeed(long seed):使用单个 long种子设置该随机数生成器的种子

import java.util.Arrays;
import java.util.Random;

public class RandomTest1 {
    public static void main(String[] args) {
        Random random = new Random(100);
        // seed相同的对象生成的随机数相同
        Random random1 = new Random();
        // 生成一个int随机数
        System.out.println(random1.nextInt()); // 1298071954
        // 生成一个int随机数:[0,10)
        System.out.println(random.nextInt(10)); // 3
        // 生成一个boolean随机数
        System.out.println(random.nextBoolean()); // false
        // 产生随机字节,并将它们放置到提供的字节数组中。 
        byte[] arr = new byte[5];
        random.nextBytes(arr);
        System.out.println(Arrays.toString(arr)); // [69, -13, -23, 49, 105]

        // 生成一个double随机数,介于0.0和1.0之间的均匀分布的值。
        System.out.println(random.nextDouble()); // 0.6671595726539502
        // 生成一个float随机数,介于0.0和1.0之间的均匀分布的值。
        System.out.println(random.nextFloat()); // 0.77844083
        // 返回高斯(“正态”)分布双精度值,与该随机数生成器的序列的μ = 0.0, σ2=1.0的高斯(“正态”)分布双精度值。 
        System.out.println(random.nextGaussian()); // -1.0560180403978943
        // 生成一个long随机数
        System.out.println(random.nextLong()); // -5496492430263629571
    }
}

2.2 如何获取随机数

1. 使用Math.random()获取

获取到的是一个[0, 1)之间的随机数

获取一个随机数[a,b],公式:

[a,b] : (int)(Math.random() * (b - a +1) + a)

[a,b) : (int)(Math.random() * (b - a) + a)

2. 使用java.util.Random类获取

要生成一个随机数,可以使用nextInt()nextLong()nextFloat()nextDouble()

import java.util.Random;

public class RandomTest {
    public static void main(String[] args) {
        // 使用Math.random()获取
        for (int i = 0; i < 5; i++) {
            System.out.print(randomNum(20, 10) + "\t");
        }
        System.out.println();
        // 使用java.util.Random类获取
        Random random = new Random();
        System.out.println(random.nextInt()); // 1298071954
        System.out.println(random.nextInt(10)); // 3
        System.out.println(random.nextBoolean()); // false
        System.out.println(random.nextDouble()); // 0.6671595726539502
        System.out.println(random.nextFloat()); // 0.77844083
    }

    public static int randomNum(int a, int b) {
        if (a < b) {
            return (int)(Math.random() * (a - b) + b);
        }
        return (int)(Math.random() * (b - a) + a);
    }
}

3. Scanner类

Scanner是标准输入流,IO流

常用方法

close():关闭Scanner输入流

判断是否输入的是指定类型:hasNext()、hasNextBigDecimal()、hasNextBoolean()、hasNextInt() 等,如果是指定的类型,则返回true。

输入指定类型数据:nextInt() 、nextDouble() 、nextFloat() 、nextByte、nextBoolean() 、nextShort() 、nextLong() 等

next() 查找并返回此扫描仪的下一个完整令牌。(返回字符串)通过空格获取数据,本质即是单词

nextLine() 将此扫描仪推进到当前行并返回跳过的输入。

next() 与 nextLine() 区别

next():

  • 1、一定要读取到有效字符后才可以结束输入。
  • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  • next() 不能得到带有空格的字符串。

nextLine():

  • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
  • 2、可以获得空白。
// 导包
import java.util.Scanner;

public class ScannerTest {
    public static void main(String[] args) {
        // 实例化Scanner类对象
        Scanner scan = new Scanner(System.in);
        // 返回Pattern这 Scanner目前使用匹配符
        System.out.println(scan.delimiter()); // \p{javaWhitespace}+

        // 调用Scanner类对象的对应的方法
        System.out.println("请输入一个整数:");
        int a = scan.nextInt();
        System.out.println(a);
        System.out.println("请输入一个小数:");
        double b = scan.nextDouble();
        System.out.println(b);
        // hasNext()判断输入的是否是字符串
        if(scan.hasNext()) {
            String str1 = scan.next(); // "You are pig"
            System.out.println("输入的数据为:" + str1); // "You"
        }
        String str2 = scan.nextLine(); // "You are pig"
        System.out.println("输入的数据为:" + str2); // "You are pig"
        // 关闭scan流
        scan.close();
    }
}

4. String类(字符串对象)

String字符串对象在java.lang.String中,所以不需要导入

字符串:字符连在一起,形成了字符串。人的肉眼可以识别分符号

在Java中,一般表现为"",引号的内部内容就是字符串

在Java中,字符串String是引用数据类型

字符串是一个常量,是一种不可变的数据类型

定义字符串:String str = "abc";

        // 第一种方法
        String s = "abc";
        System.out.println(s);
        // 第二种方法
        String ss = new String(); // 相当于String ss = "";
        System.out.println(ss);
        // 第三种方法
        String sss = new String("Hello"); // 相当于String ssa = "Hello";
        // 这里可能创建了一个或者两个字符串对象,一定会创建一个sss,如果常量池中不存在"Hello",还会创建一个"Hello"对象
        System.out.println(sss);

常见的字符串方法

char charAt(int index):获取下标对应的字符,返回指定索引处的 char 值。

int compareTo(Object o):把这个字符串和另一个对象比较。

int compareTo(String anotherString):按字典顺序比较两个字符串。

int compareToIgnoreCase(String str):按字典顺序比较两个字符串,不考虑大小写。

String concat(String str):将指定字符串连接到此字符串的结尾。

boolean contentEquals(StringBuffer sb):当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。

static String copyValueOf(char[] data):返回指定数组中表示该字符序列的 String。

static String copyValueOf(char[] data, int offset, int count):返回指定数组中表示该字符序列的 String。

boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。

boolean equals(Object anObject):将此字符串与指定的对象比较。

boolean equalsIgnoreCase(String anotherString):将此 String 与另一个 String 比较,不考虑大小写。

byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

byte[] getBytes(String charsetName):使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符从此字符串复制到目标字符数组

int hashCode():返回此字符串的哈希码。

int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。

int indexOf(int ch, int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。

int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。

int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

String intern():返回字符串对象的规范化表示形式。

int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出现处的索引。

int lastIndexOf(int ch, int fromIndex):返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。

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

int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。

int length():返回此字符串的长度。

boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。

boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len):测试两个字符串区域是否相等。

boolean regionMatches(int toffset, String other, int ooffset, int len):测试两个字符串区域是否相等。

String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。

String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。

String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。

String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串。

boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。

boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始。

CharSequence subSequence(int beginIndex, int endIndex):返回一个新的字符序列,它是此序列的一个子序列。

String substring(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串。

String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串的一个子字符串。

char[] toCharArray():将此字符串转换为一个新的字符数组。

String toLowerCase():使用默认语言环境的规则将此 String 中的所有字符都转换为小写。

String toLowerCase(Locale locale):使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。

String toString():返回此对象本身(它已经是一个字符串!)。

String toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

String toUpperCase(Locale locale):使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。

String trim():返回字符串的副本,忽略前导空白和尾部空白。

static String valueOf(primitive data type x):返回给定data type类型x参数的字符串表示形式。

contains(CharSequence chars):判断是否包含指定的字符系列。

isEmpty():判断字符串是否为空。

static String join(标识符, 字符串数组):返回一个由字符串数组连接在一起的一份指定的delimiter

import java.util.Arrays;

public class StringTest {
    public static void main(String[] args) {
        // 第一种方法
        String s = "abc";
        System.out.println(s);
        // 第二种方法
        String ss = new String(); // 相当于String ss = "";
        System.out.println(ss);
        // 第三种方法
        String sss = new String("Hello"); // 相当于String ssa = "Hello";
        System.out.println(sss);

        for (int i = 0; i < sss.length(); i++) {
            System.out.println(sss.charAt(i));
        }
        
        System.out.println(s.codePointAt(0)); // 97
        // System.out.println(s.codePointBefore(0)); //java.lang.StringIndexOutOfBoundsException
        System.out.println(s.codePointBefore(1)); // 97
        System.out.println(s.codePointCount(0, 1)); // 1

        // 比较两个字符串是否相等
        System.out.println(s.compareTo("cde")); // 1
        System.out.println(s.compareTo("abc")); // 0
        System.out.println(s.compareTo("abcd")); //-1
        // 忽略大小写
        System.out.println(s.compareToIgnoreCase("ABC")); // 0

        System.out.println(s.concat("abc")); // abcabc
        System.out.println(s.contains(s)); // true

        String str = "www.baidu.com";
        String[] sub = str.split("\\.");
        System.out.println(Arrays.toString(sub));
        
    }
}

注意:字符串不要使用等于符号判断是否相等

在java中 == 判断的是值是否相等,不能用来判断字符串

因为字符串的创建方式有多种,不同的创建方式,地址(指针) 可能不一致

基本数据类型都是可以使用 == 判断是否相等;字符串不能还是用 == 判断是否相等

字符串中 == 判断的字符串的地址,equals判断是字符串的值;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Golang_HZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值