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

Java基础(9)本地API


目录

1.前言

2.正文

2.1.基础类与工具类

2.1.1String类

2.1.2System类和Runtime类

2.1.3Math和Random类

2.1.4日期时间类

2.1.5包装类

2.1.6正则表达式

3.小结


1.前言

哈喽大家好啊,Java基础的学习马上就要告一段落了,今儿分享的是一些Java常用的本地API,让我们开始吧。

2.正文

2.1.基础类与工具类

2.1.1String类

ToString方法:返回字符串本身。

public static void main(String[] args) {
        String str = new String("abcd");
        System.out.println(str.toString());
}

其中toString可以省略。


length方法:返回字符串序列长度。

public static void main(String[] args) {
        String str = new String("abcd");
        System.out.println(str.length());
}


getBytes方法:getBytes()方法会返回一个byte数组,该数组包含了字符串的字节表示。默认情况下,getBytes()方法使用平台默认的字符编码来转换字符串。

public static void main(String[] args) {
        String str = new String("abcd");
        byte[] array = str.getBytes();
        for(int i = 0;i < array.length;i++){
            System.out.println(array[i]);
        }
    }

 


toCharArray:它用于将字符串转换成一个字符数组。这个方法会创建一个新的字符数组,并将调用该方法的字符串中的所有字符复制到这个新数组中。

public static void main(String[] args) {
        String str = new String("abcd");
        char[] array = str.toCharArray();
        for(int i = 0;i < array.length;i++){
            System.out.println(array[i]);
        }
    }


charAt:用于返回指定索引处的字符。这个方法接受一个整数参数,即你想要获取字符的位置(索引),并返回该位置的字符。

public static void main(String[] args) {
        String str = new String("abcd");
        for(int i = 0;i < str.length();i++){
            System.out.print(str.charAt(i) + " ");
        }
    }

为了与上文加以区分,这里输出方式做了稍微修改。 

 


 isEmpty:用于检查字符串是否为空。这个方法返回一个布尔值,如果字符串的长度为 0,即字符串为空或者只包含空格(如果考虑空格为有效内容的话,isEmpty() 在这种情况下会返回 false),则返回 true;否则返回 false

public static void main(String[] args) {
        String str = new String("abcd");
        String str1 = ("");
        System.out.println(str.isEmpty());
        System.out.println(str1.isEmpty());
    }


equals方法:equals 方法用于比较两个对象的内容是否相等。

public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = new String("hello");

        System.out.println(str1.equals(str2)); 
        System.out.println(str1.equals(str3)); 
    }


StringBufferStringBuilder类:它们都继承自 AbstractStringBuilder 类,用于创建可变的字符串序列。当你需要在多线程环境中进行字符串操作时,选择 StringBuffer。当你在单线程环境中进行字符串操作,并且需要更好的性能时,选择 StringBuilder

public static void main(String[] args) {
        StringBuffer str1 = new StringBuffer("Hello");
        str1.append("World");
        System.out.println(str1);

        StringBuilder str2 = new StringBuilder("Hello ");
        str2.append("World");
        System.out.println(str2);
    }


2.1.2System类和Runtime类

常见的System方法:

标准的输入输出流:

  • System.outPrintStream 类型,用于向控制台打印输出。
  • System.inInputStream 类型,用于从控制台读取输入。
  • System.errPrintStream 类型,用于向控制台打印错误信息。
public static void main(String[] args) {
        //标准输出流
        System.out.println(1);
        //标准输入流
        Scanner scanner = new Scanner(System.in);
        //输出错误信息
        System.err.println(10);
    }


系统属性:

  • System.getProperty(String key):根据指定的键获取系统属性值。
public static void main(String[] args) {
        System.out.println(System.getProperty("java.home"));
    }


复制数组:这个方法用于将一个数组中的元素复制到另一个数组中。

public static void main(String[] args) {
        int[] a = {1,2,3,4,5};
        int[] b = new int[a.length];
        System.arraycopy(a,0,b,0,a.length);
        System.out.println(Arrays.toString(b));
    }


常见的Runtime方法:

内存管理

  • Runtime.getRuntime().totalMemory():获取JVM的总内存量(以字节为单位)。
  • Runtime.getRuntime().freeMemory():获取JVM中当前可用的内存量。
  • Runtime.getRuntime().maxMemory():获取JVM可以使用的最大内存量。
public static void main(String[] args) {
        Runtime runtime = Runtime.getRuntime();
        System.out.println("jvm总内存数 " + runtime.totalMemory() + " byte");
        System.out.println("jvm空闲内存数 " + runtime.freeMemory() + " byte");
        System.out.println("jvm可用最大内存数 " + runtime.maxMemory() + " byte");
    }

2.1.3Math和Random类

Math类包含了大量的数学运算方法,并且都是static方法,可以直接通过类名调用。这些方法包括基本算术运算、三角函数、对数函数、取整和随机数生成等。Math类是一个工具类,它不允许实例化。

  • 基本运算

    • Math.abs(int a):返回绝对值。
    • Math.max(int a, int b):返回两者中的最大值。
    • Math.min(int a, int b):返回两者中的最小值。
    • Math.pow(double a, double b):返回ab次幂。
    • Math.sqrt(double a):返回平方根。
  • 取整

    • Math.ceil(double a):向上取整,返回大于等于a的最小整数。
    • Math.floor(double a):向下取整,返回小于等于a的最大整数。
    • Math.round(float a):四舍五入,返回最接近的整数。
  • 随机数生成

    • Math.random():返回一个0.01.0之间的随机小数(包括0但不包括1)。
public static void main(String[] args) {
        int a = -1,b = 2,c = 4;
        //基本运算
        System.out.println(Math.abs(a));
        System.out.println(Math.max(a,b));
        System.out.println(Math.min(a,b));
        System.out.println(Math.pow((double) a,(double) b));//这里面需要时double类型
        System.out.println(Math.sqrt((double) c));
        System.out.println("---------------");
        //取整
        float x = 1.5F;
        double y = 1.4;
        System.out.println(Math.ceil(y));
        System.out.println(Math.floor(x));
        System.out.println(Math.round(x) + "||" + Math.round(y));
        System.out.println("---------------");
        //随机数生成
        System.out.println(Math.random());
    }

Random类用于生成伪随机数。与Math.random()生成的随机数不同,Random类可以生成多种数据类型的随机数,如intlongfloatdouble和布尔值。它提供了更多控制随机数生成的方法,可以指定随机数的范围,还可以通过指定种子(seed)来生成可预测的随机数序列。

  • 构造方法

    • Random():构造一个不带种子的随机数生成器。
    • Random(long seed):带种子的构造方法,用于生成可预测的随机序列。
  • 生成随机数

    • nextInt():返回任意范围的int类型随机数。
    • nextInt(int bound):返回0bound-1之间的int随机数。
  • 种子操作

    • setSeed(long seed):设置种子值,从而控制生成的随机数序列。
public static void main(String[] args) {
        Random random = new Random();
        System.out.println(random.nextInt());
        System.out.println(random.nextFloat());
        System.out.println(random.nextInt(20));
    }

2.1.4日期时间类

java.time包是Java本地API中处理日期和时间的主要工具,提供了很多类来处理不同类型的日期、时间和时区操作。

1. LocalDate

  • LocalDate类用于表示一个“仅包含日期”的对象,即年、月、日的组合,而不包含具体的时间。比如“2023年11月8日”可以用LocalDate来表示。

2. LocalTime

  • LocalTime类表示一个“仅包含时间”的对象,即小时、分钟和秒等的组合,而不包含具体日期。比如“14:30:00”可以用LocalTime来表示。

3. LocalDateTime

  • LocalDateTime类是LocalDateLocalTime的组合,用于表示日期和时间的组合,但不带有时区信息。比如“2023年11月8日14:30:00”可以用LocalDateTime表示。

4. Instant

  • Instant类表示一个精确到纳秒的时间点,通常用于记录特定时刻(或时间戳),不与日期、时间和时区关联。Instant适合用于需要高精度记录的场景,如日志的时间戳、事件发生的确切时间等。

附上实操:

public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalTime todayTime = LocalTime.now();
        LocalDateTime dateTime = LocalDateTime.now();
        Instant instant = Instant.now();

        System.out.println(today);
        System.out.println(LocalTime.now());
        System.out.println(LocalDateTime.now());
        System.out.println(instant.now());
    }

2.1.5包装类

包装类是为每种基本数据类型提供的对象封装。包装类可以将基本类型转换为对象,以便在需要对象的上下文中使用,例如在集合中存储基本数据类型。包装类提供了许多实用方法,可以处理基本类型和字符串之间的转换、数值运算等。

每一个基本的数据类型都有对应的包装类,看表格:

byteByte
shortShort
int  Integer
longLong
floatFloat
doubleDouble
char   Character
booleanBoolean

使用 valueOf() 方法将字符串转换为对应的包装类对象:

Integer integer = Integer.valueOf("123");//将字符串转为整型

使用 toString() 方法将包装类对象转换为字符串:

public static void main(String[] args) {
        Integer integer = 123;
        String str = integer.toString();
        if(str instanceof String){
            System.out.println("str为字符串类型");
        }
        else System.out.println("啥也不是");
    }

用instanceof关键字判断一下类型

2.1.6正则表达式

正则表达式(Regular Expression,简称 Regex)是一种用于匹配和操作字符串的工具。它提供了一种灵活而简洁的方式,用于定义复杂的字符串匹配规则。正则表达式广泛应用于文本搜索、验证、替换等场景,能够在大量文本中快速找到、修改或验证数据。

正则表达式的处理是通过 java.util.regex 包来实现的,该包主要包括两个类:PatternMatcherPattern 用于定义正则表达式,Matcher 用于执行匹配操作。

下面附上具体解释:


Pattern 类

Pattern 类用于编译正则表达式。常用方法有:

  • compile(String regex):将正则表达式编译成一个 Pattern 对象。
  • matches(String regex, CharSequence input):静态方法,检查输入字符串是否完全匹配正则表达式。

Matcher 类

Matcher 类用于执行匹配操作。常用方法有:

  • matches():检查整个字符串是否与正则表达式匹配。
  • find():在字符串中查找下一个符合正则表达式的子字符串。
  • group():返回最近一次匹配的子字符串。
  • replaceAll(String replacement):替换所有匹配的子字符串。

正则表达式常用的符号:

符号描述
.匹配任意单个字符(除换行符)
\d匹配数字 [0-9]
\D匹配非数字
\w匹配字母、数字或下划线
\W匹配非字母、数字或下划线
\s匹配空白字符(空格、制表符等)
\S匹配非空白字符
^匹配行的开头
$匹配行的结尾
*匹配前一个字符 0 次或多次
+匹配前一个字符 1 次或多次
?匹配前一个字符 0 次或 1 次
{n}匹配前一个字符 n 次
{n,}匹配前一个字符至少 n 次
{n,m}匹配前一个字符至少 n 次,至多 m 次
[abc]匹配字符 abc
[^abc]匹配除 abc 外的任意字符
(abc)匹配子表达式 abc

下面给上示例,以下的示例仅修改部分但结果不同,可以观察学习一下:
public static void main(String[] args) {
        String str1 = "\\d";
        String str2 = "1";

        boolean istrue = Pattern.matches(str1,str2);
        System.out.println(istrue);
    }

此运行为true。

public static void main(String[] args) {
        String str1 = "\\d";
        String str2 = "123";

        boolean istrue = Pattern.matches(str1,str2);
        System.out.println(istrue);
    }

运行为false。

public static void main(String[] args) {
        String str1 = "\\d+";
        String str2 = "123";

        boolean istrue = Pattern.matches(str1,str2);
        System.out.println(istrue);
    }

运行为true。

public static void main(String[] args) {
        String str1 = "\\d+";
        String str2 = "123好";

        boolean istrue = Pattern.matches(str1,str2);
        System.out.println(istrue);
    }

运行为false。


还可以用正则表达式查找子字符串:

public static void main(String[] args) {
            String regex = "\\beating\\b";
            String input = "I love eating and sleeping.";

            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(input);

            while (matcher.find()) {
                System.out.println("找到匹配: " + matcher.group());
            }
        }

运行结果:


也可以用来字符串替换:

public static void main(String[] args) {
        String regex = "\\d";
        String input = "我有123个苹果";
        System.out.println("原结果为:" + input);

        String result = Pattern.compile(regex).matcher(input).replaceAll("#");
        System.out.println("替换结果: " + result); 
    }

详细解释下为何出现图中结果的:

  • Pattern.compile(regex):编译给定的正则表达式 regex,返回一个 Pattern 对象。
  • matcher(input):在指定的输入字符串 input 上创建一个匹配器对象 Matcher,用于查找和替换匹配的子字符串。
  • replaceAll("#"):将 input 中所有匹配 regex 的部分替换为 "#",并返回替换后的新字符串。

正则表达式先讲这么多。

3.小结

今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,加油!


http://www.kler.cn/a/398565.html

相关文章:

  • [241115] Debian 12.8 发布 | Mistral AI 推出批量 API,成本降低 50%
  • 21.3D surface
  • Three.js PBR材质
  • WP网站如何增加文章/页面的自定义模板
  • git配置用户信息
  • 【小白可懂】微信小程序---课表渲染
  • 算法编程题-golang语言协程池
  • Java--反射
  • vTESTstudio系列15--vTESTstudio-Doors的需求和测试用例的管理
  • 5-对象的访问权限
  • 单片机 串口实验 实验五
  • MongoDB创建只读用户并授权指定集合的查询权限
  • 利用Excel批量生成含二维码的设备管理标签卡片
  • 多目标优化算法:多目标鹅算法(MOGOOSE)求解UF1-UF10,提供完整MATLAB代码
  • 计算机网络-理论部分(一):概览
  • 两周学习js总结
  • 详解八大排序(三)------(快速排序)
  • LLM性能优化中的一些概念扫盲
  • LabVIEW中的UDP与TCP比较
  • React Native 全栈开发实战班 - 网络与数据之网络请求基础
  • 实习冲刺练习 第二十四天
  • 《Django 5 By Example》阅读笔记:p54-p75
  • 无需制作PE系统盘,完成更换固态,数据迁移
  • Windows docker下载minio出现“Using default tag: latestError response from daemon”
  • Matlab使用深度网络设计器为迁移学习准备网络
  • Spark读MySQL数据rdd分区数受什么影响,读parquet、hdfs、hive、Doris、Kafka呢?