Java常用的API(2)

简介: Java常用的API

Java常用的API(1)https://developer.aliyun.com/article/1540974

BigInteger类的成员方法

BigInteger类的存储方式

先将大整数转换成二进制补码,以32位为一组拆成若干段(如上图是拆成了3段)存入一个数组中。其中,第一位是无符号位。

BigDecimal类

小数在计算机中的存储模式

BigDecima的作用:①用于小数的精确计算;②用来表示很大的小数

如果是除不尽的小数,需要设置精确几位和舍入模式。

BigDecima的存储模式

把输入的字符参数拆开,存储对应的ASCII数值放到一个数组中。

可以使用debug功能分析Java的底层运算

正则表达式

正则表达式作用:①校验字符串是否满足规则;②在一段文本中查找满足要求的内容

[a-z&&[def]]  //a-z和def的交集。为:d,e,f
//细节:如果要求两个范围的交集,那么需要写符号8&
//如果写成了一个&,那么此时&表示就不是交集了,而是一个简简单单的&符号
System.out.println("a".matches("[a-z&&[d-f]]"));
System.out.println("&".matches("[a-z&&[d-f]]"));
System.out.println("a".matches("[a-z&[d-f]]"));
System.out.println("&".matches("[a-z&[d-f]]"));

“\”在Java中表示转义字符

//忽略大小写:(?i),会忽略在这之后的字母的大小写
String regex4="a((?i)b)c";
System. out. println("------------");
System.out.println("abc". matches(regex4));//true
System.out.println("WBC". matches(regex4));//false
System.out.println("aBc". matches(regex4));//true

正则表达式总结

正则表达式在字符串方法中的使用

分组

Q:正则表达式中的[]和()什么区别?

分组就是一个小括号

//需求1:判断一个字符串的开始字符和结束字符是否一致?只考虑一个字符
//举例:ai23a b456b 17891&abc&a123b(false)
String r1 = "(.).+\\1";
String str1 = "ai23a还是短发b456b的防护等级17891&abc&a123b";
extracted(r1,str1);
System.out.println("ai23a".matches(r1));
System.out.println("b456b".matches(r1));
System.out.println("17891&abc&a123b".matches(r1));
System.out.println("ai23a还是短发b456b的防护等级17891&abc&a123b".matches(r1));
System.out.println("-------------------");
//需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符
//举例:abc123abc b456b123789123&l@abc&!@abc123abd(false)
String r2 = "(.+).+\\1";
System.out.println("abc123abc".matches(r2));
System.out.println("b456b".matches(r2));
System.out.println("123789123".matches(r2));
System.out.println("&!@abc&!@".matches(r2));
System.out.println("abc123abd".matches(r2));
System.out.println("-------------------");
//需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致
//举例:aaa123aaabbb456bbb111789111&&abc&&
/*(.):把首字母看做一组
   \\2:把首字母拿出来再次使用
   +:作用于\\2,表示后面重复的内容出现1次或多次*/
String r3 = "((.)\\2+).+\\1";
System.out.println("aaa123aaa".matches(r3));
System.out.println("bbb456bbb".matches(r3));
System.out.println("111789111".matches(r3));
System.out.println("&&abc&&".matches(r3));
System.out.println("aaa123aad".matches(r3));
System.out.println("-------------------");

后续还要继续使用本组数据:

  • 正则内部使用:\\组号
  • 正则外部使用:$组号
/*需求:
  将字符串:我要学学编编编编程程程程程程
  替换为:我要学编程*/
String s = "我要学学编编编编程程程程程程";
//(.)表示把重复内容的第一个字符看做一组
//\\1表示第一字符再次出现
//+至少一次
//$1表示把正则表达式中第一组的内容,再拿出来用
String r = "(.)\\1*";
System.out.println(s.replaceAll(r,"$1"));

捕获分组和非捕获分组

非捕获分组:仅仅是把括号括起来,而不占用组号

/*
    需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。
    需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11Java17 Java17
    需求3:爬取除了版本号为8,11,17的Java文本,*/
String str = "Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,因为"+
    "这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台。"
String r1 = "((?i)Java)(?=8|11|17)";        //需求1
String r21 = "((?i)Java)(8|11|17)";        //需求2
String r22 = "((?i)Java)(?:8|11|17)";        //需求2
String r3 = "((?i)Java)(?!8|11|17)";        //需求3
Pattern p = Pattern.compile(r1);
Matcher m = p.matcher(str);
while (m.find()) {
    String g = m.group();
    System.out.println(g);
}

Q:正则表达式中?到底怎么用?

package api;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTest4 {
    public static void main(String[] args) {
        String str = "Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa" +
                "经历了很多版本,目前企业中用的最多的是JAva8和JaVa11," +
                "因为这两个是长期支持版本,下一个长期支持版本是JavA17,相信在未来不久JAvA17也会逐渐登上历史舞台";
        //extracted1(str);
        /*有如下文本,请按照要求爬取数据。”
        Java自从95年问世以来,abbbbbbbbbbbbaaaaaaaaaaaaaaaaaa
        经历了很多版本,目前企业中用的最多的是Java8和Java11,
        因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
        需求1:按照ab+的方式爬取ab,b尽可能多获取
        需求2:按照ab+的方式爬取ab,b尽可能少获取
        贪婪爬取:在爬取数据时尽可能多获取数据
        非贪婪爬取:在爬取数据时尽可能少获取数据
        Java中默认是贪婪爬取*/
        String s1 = "ab+";        //需求1,贪婪爬取
        String s2 = "ab+?";        //需求2,非贪婪爬取
        Pattern p = Pattern.compile(s2);
        Matcher m = p.matcher(str);
        while (m.find()) {
            String g = m.group();
            System.out.println(g);
        }
    }
    private static void extracted1(String str) {
    /*有文本:Java自从95年问世以来,经历了很多版本,目前企业中用的最多的是Java8和Java11,
    因为这两个是长期支持版本,下一个长期支持版本是Java17,相信在未来不久Java17也会逐渐登上历史舞台
    需求1:爬取版本号为8,11,17的Java文本,但是只要Java,不显示版本号。
    需求2:爬取版本号为8,11,17的Java文本。正确爬取结果为:Java8 Java11Java17 Java17
    需求3:爬取除了版本号为8,11,17的Java文本,*/
        String s1 = "((?i)Java)(?=8|11|17)";        //需求1
        String s21 = "((?i)Java)(8|11|17)";        //需求2
        String s22 = "((?i)Java)(?:8|11|17)";        //需求2
        String s3 = "((?i)Java)(?!8|11|17)";        //需求3
        Pattern p = Pattern.compile(s3);
        Matcher m = p.matcher(str);
        while (m.find()) {
            String g = m.group();
            System.out.println(g);
        }
    }
}

Java常用的API(3)https://developer.aliyun.com/article/1540976

目录
相关文章
|
21天前
|
Java API Spring
打造未来电商新引擎:揭秘Java可扩展API设计,让支付与物流灵活如丝,引领电商时代潮流!
【8月更文挑战第30天】本文通过电商平台案例,探讨了如何设计可扩展的Java API。首先定义支付和物流服务的接口与抽象类,然后实现具体服务,接着引入工厂模式或依赖注入管理服务实例,最后通过配置实现灵活扩展。这种设计确保了应用架构的灵活性和长期稳定性。
37 3
|
22天前
|
安全 Java API
告别繁琐编码,拥抱Java 8新特性:Stream API与Optional类助你高效编程,成就卓越开发者!
【8月更文挑战第29天】Java 8为开发者引入了多项新特性,其中Stream API和Optional类尤其值得关注。Stream API对集合操作进行了高级抽象,支持声明式的数据处理,避免了显式循环代码的编写;而Optional类则作为非空值的容器,有效减少了空指针异常的风险。通过几个实战示例,我们展示了如何利用Stream API进行过滤与转换操作,以及如何借助Optional类安全地处理可能为null的数据,从而使代码更加简洁和健壮。
56 0
|
30天前
|
Java 编译器 API
Java新手必看:轻松掌握API文档使用技巧!
API是预定义的接口,允许开发人员使用一组例程及协议而无需了解内部实现细节。Java API文档详述了标准类库,支持平台无关性和安全性,确保Java程序跨平台的一致性行为。Java类可通过单文件或多文件定义,并支持内部类及包组织。常用API如`Scanner`用于输入处理,`Random`生成随机数,`ArrayList`提供动态列表管理,而`Arrays`和`Math`分别简化数组操作和数学计算。掌握这些API能显著提升Java开发效率。
|
9天前
|
Java API C++
Java 8 Stream Api 中的 peek 操作
本文介绍了Java中`Stream`的`peek`操作,该操作通过`Consumer<T>`函数消费流中的每个元素,但不改变元素类型。文章详细解释了`Consumer<T>`接口及其使用场景,并通过示例代码展示了`peek`操作的应用。此外,还对比了`peek`与`map`的区别,帮助读者更好地理解这两种操作的不同用途。作者为码农小胖哥,原文发布于稀土掘金。
Java 8 Stream Api 中的 peek 操作
|
13天前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
42 11
|
14天前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
38 11
|
11天前
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
13天前
|
Java API 数据处理
【Java的SIMD革命】JDK 22向量API:释放硬件潜能,让Java应用性能飙升!
【9月更文挑战第7天】 JDK 22向量API的发布标志着Java编程语言在SIMD技术领域的重大突破。这一新特性不仅释放了现代硬件的潜能,更让Java应用性能实现了飙升。我们有理由相信,在未来的发展中,Java将继续引领编程语言的潮流,为开发者们带来更加高效、更加强大的编程体验。让我们共同期待Java在SIMD技术的推动下开启一个全新的性能提升时代!
|
14天前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
12天前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!