欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > Java 工具类(知识整理)

Java 工具类(知识整理)

2025/2/27 6:27:22 来源:https://blog.csdn.net/NovakG_/article/details/145878342  浏览:    关键词:Java 工具类(知识整理)

一、Scanner 工具类

java.util.Scanner中的工具类
Scanner 类扫描控制台输入,里面集成了一些方法去读取输入的内容,方法如下:

// 创建 Scanner 对象,从标准输入流中读取数据,其中 System.in 返回的是一个字节输入流。
Scanner scanner = new Scanner(System.in);//nextLine() 方法会扫描输入流中的字符,直到遇到行末尾的换行符 \n,然后将该行的内容作为字符串返回,同时,nextLine() 会将 Scanner 对象的位置移动到下一行的开头,以便下一次读取数据时从下一行的开头开始读取
String line = scanner.nextLine();//nextInt() 用于从输入流中读取下一个整数并返回,如果输入流中没有整数,或者不是整数,将抛出 InputMismatchException 异常。
int a = scanner.nextInt();sboolean hasNext():检查输入流是否还有下一个标记。
boolean hasNextLine():检查输入流是否还有下一行。
String next():读取输入流中的下一个标记(使用默认的分隔符,通常是空格或换行符)。
double nextDouble():读取输入流中的下一个双精度浮点数。//scanner 对象的构造方法中还包含着读取file对象,读取后可以使用上面方法对文件中的数据进行检索Scanner scanner = new Scanner(file);//正则表达式中的 \Z 表示输入的结尾,也就是文件结束符。在 Scanner 类中,我们可以使用 \Z 作为分隔符,以便读取整个文件内容。scanner.useDelimiter("\\Z");//当然后续还有4个findxxx方法可以去查找匹配项

二、Arrays 工具类

数组专用的工具类 java.util.Arrays,其提供了静态方法供数组进行操作,如下:

/**** 创建数组:* copyOf,复制指定的数组,截取或用 null 填充* copyOfRange,复制指定范围内的数组到一个新的数组* fill,对数组进行填充*/
String[] intro = new String[] { "沉", "默", "王", "二" };
String[] stutter = new String[4];
String[] revised = Arrays.copyOf(intro, 3);                //复制前3个
String[] abridgement = Arrays.copyOfRange(intro, 0, 3);    //复制索引 0到3
Arrays.fill(stutter, "沉默王二");                           //填充4个内容到数组/*** 比较数组:* equals(str1,str2);   数组类型,长度,内容都进行比较* hashCode();  比较严谨** 数组排序:* Arrays.sort(sorted);** 数组检索:进行二分查找,可以精确检索,也可以模糊检索,比如说忽略大小写* Arrays.binarySearch(sorted, "wang");** 数组转流* Arrays 类的 stream() 方法可以将数组转换成流,而流的中集成了一些操作集,方便对数据进行各自处理** 打印数组:* Arrays.toString()** 数组转List:* String[] intro = new String[] { "沉", "默", "王", "二" };* List<String> rets = Arrays.asList(intro);* 但是Arrays.asList返回的是 java.util.Arrays.ArrayList,并不是 java.util.ArrayList,它的长度是固定的,无法进行元素的删除或者添加。正确的转化如下:* List<String> rets1 = new ArrayList<>(Arrays.asList(intro)); * * parallelPrefix:用于在数组上进行并行前缀运算,并填充计算结果* setAll:用于初始化数组元素,填充每个元素的值基于其索引。*果/

三、StringUtils 工具类

org.apache.commons.lang3包下的StringUtils工具类

提供了多个封装的静态方法对于string对象进行处理:(详细查看官网文档)

  • trim(String str):去除字符串首尾的空白字符。
  • trimToEmpty(String str):去除字符串首尾的空白字符,如果字符串为 - null,则返回空字符串。
  • trimToNull(String str):去除字符串首尾的空白字符,如果结果为空字- 符串,则返回 null。
  • equals(String str1, String str2):比较两个字符串是否相等。
  • equalsIgnoreCase(String str1, String str2):比较两个字符串是否- 相等,忽略大小写。
  • startsWith(String str, String prefix):检查字符串是否以指定的前- 缀开头。
  • endsWith(String str, String suffix):检查字符串是否以指定的后缀- 结尾。
  • contains(String str, CharSequence seq):检查字符串是否包含指定的- 字符序列。
  • indexOf(String str, CharSequence seq):返回指定字符序列在字符串- 中首次出现的索引,如果没有找到,则返回 -1。
  • lastIndexOf(String str, CharSequence seq):返回指定字符序列在字- 符串中最后一次出现的索引,如果没有找到,则返回 -1。
  • substring(String str, int start, int end):截取字符串中指定范围 的子串。
  • replace(String str, String searchString, String replacement):- 替换字符串中所有出现的搜索字符串为指定的替换字符串。
  • replaceAll(String str, String regex, String replacement):使用- 正则表达式替换字符串中所有匹配的部分。
  • join(Iterable<?> iterable, String separator):使用指定的分隔符- 将可迭代对象中的元素连接为一个字符串。
  • split(String str, String separator):使用指定的分隔符将字符串分- 割为一个字符串数组。
  • capitalize(String str):将字符串的第一个字符转换为大写。
  • uncapitalize(String str):将字符串的第一个字符转换为小写。

四、Objects工具类

在 Java 中,所有的类都默认继承自 Object 类

  • 对象判空

    • 下面两者方法根据对象是否为空,返回的是 true 和 false,在开发过程中还需要添加 if 判断进行输出异常信息;
    • Objects 的 isNull 方法用于判断对象是否为空;
    • nonNull 方法判断对象是否不为空;
  • 对象为空时抛出异常

    • Objects 的 requireNonNull 方法可以在判断对象为空时,抛出信息;不为空时,正常输出对象值;
    • 支持重构抛出的信息
    Integer integer1 = new Integer(128);Objects.requireNonNull(integer1);
    Objects.requireNonNull(integer1, "参数不能为空");               //右边自定义信息
    Objects.requireNonNull(integer1, () -> "参数不能为空");/*使用 Supplier<String>  作为错误消息提供者,而不是直接使用 String,主要是为了性能优化,尤其是在 错误消息构建成本较高 的情况下;上边使用自定义消息会在调用requireNonNull()方法时 创建字符串,增加内存资源,而使Supplier的话,只是作为形参的形式传递到,不会执行生成错误信息,只有当对象为空时才会创建,避免无效的创建;*/
    
  • 判断两个对象是否相等

    • 数值类型:基本类型使用 “==” 进行比较内容、使用 “equals();" 编译器报错,因为基本数据类型不是对象;
    • 包装类使用 equals();进行内容比较、使用 “==” 比较的是引用 (即对象内存地址);
    • 字符串类型对象:使用 equals() 方法比较内容,使用 Objects.equals() 安全处理 null、使用 “==” 比较的是引用 (即对象内存地址);
    • 自定义对象类型:重写 equals() 方法以实现内容比较,使用 equals() 方法进行比较,如下所示;
      @Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null || getClass() != obj.getClass()) {return false;}Person person = (Person) obj;return age == person.age && Objects.equals(name, person.name);}
    
  • 获取对象的 hashCode

    • 在 Java 中,hashCode() 方法是 Object 类中定义的一个方法,用于返回对象的哈希码值。哈希码是一个整数,它代表了对象在内存中的一种近似表示

      • 如果两个对象的 equals() 方法返回 true,那么它们的 hashCode() 方法必须返回相同的值。这是 Java 规范的要求,否则哈希表将无法正常工作
      • 两个对象的 hashCode() 方法返回相同的值,但它们的 equals() 方法可能返回 false。这意味着这两个对象在哈希表中的位置可能相同,但它们的内容并不相等。
    • 主要用于支持哈希表,可以使用哈希算法来快速查找、插入和删除元素;

    • 工作原理:哈希表通过将对象的哈希码映射到表中的一个位置来存储对象。当需要查找一个对象时,哈希表会先计算出对象的哈希码,然后根据哈希码找到对象在表中的位置,从而快速找到对象。

    • 用法:

      String str = new String("沉默王二");System.out.println(Objects.hashCode(str)); // 结果867758096
    
  • 比较两个对象

    • 在 Java 中,Object.compare 方法是一个静态方法,定义在 Java.util.Object 类中。方法签名如下:
      public static <T> int compare(T a, T b, Comparator<? super T> c)
    
    • 接受两个比较对象和一个比较器,比较器得重写自定义内部规则。示例如下所示:
      Person person1 = new Person("itwanger", 30);Person person2 = new Person("chenqingyang", 25);// 创建一个比较器,用于比较 Person 对象的年龄Comparator<Person> ageComparator = Comparator.comparingInt(Person::getAge);// 使用 Objects.compare 方法比较两个 Person 对象的年龄int ageComparisonResult = Objects.compare(person1, person2, ageComparator);System.out.println("年龄排序: " + ageComparisonResult);
    
  • 比较两个数组

    • 比较一维数组和二维数组,调用Object.deepEquals(数组对象,数组对象),如果判断成功返回 true ,失败返回 false;

五、Collections工具类

Collections 是 JDK 提供的一个工具类,位于 java.util 包下。相当于集合框架的管家,内部含多种集合封装的静态方法。

除了JDK原生的Collections工具类,其在一些主流的框架里面也是有对应的工具包,如Spring的org.springframework.util包下的 CollectionUtils 工具类和 Apache的org.apache.commons.collections包下的 CollectionUtils 工具类。

以下是部分操作方法(详细去查看官方文档)

/*** 1. 排序操作:*  reverse(List list):反转顺序*  shuffle(List list):洗牌,将顺序打乱*  sort(List list):自然升序*  sort(List list, Comparator c):按照自定义的比较器排序*  swap(List list, int i, int j):将 i 和 j 位置的元素交换位置* * 2. 查找操作:* binarySearch(List list, Object key):二分查找法,前提是 List 已经排序过了* max(Collection coll):返回最大元素* max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素* min(Collection coll):返回最小元素* min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素* fill(List list, Object obj):使用指定对象填充* frequency(Collection c, Object o):返回指定对象出现的次数* * 3. 同步操作:* HashMap 是线程不安全的,这个我们前面讲到了。那其实 ArrayList 也是线程不安全的,没法在多线程环境下使用,那 Collections 工具类中提供了多个 synchronizedXxx 方法,这些方法会返回一个同步的对象,从而解决多线程中访问集合时的安全问题。* SynchronizedList synchronizedList = Collections.synchronizedList(list);** /

六、Hutool 工具包

官方:https://hutool.cn/
Hutool 是一个开源的工具包,其内部集成了各种各样封装好的库。Hutool 对不仅对 JDK 底层的文件、流、加密解密、转码、正则、线程、XML等做了封装,还提供了以下这些组件:

更多需求查看其官方文档,里面内容包含了各自api使用说明。

七、Guava 工具库

  • 开发者:Google
  • 功能:
    • 提供集合、缓存、并发工具、字符串处理、I/O 操作等多种功能。
    • 提供了强大的集合框架,如 ImmutableList、Multimap、BiMap 等。
    • 支持缓存机制(Cache 和 LoadingCache),允许高效的数据存储和访问。
    • 提供了函数式编程的支持,如 Function、Predicate 等。
    • 有助于简化常见的编程任务,减少样板代码。
  • 优点
    • 功能丰富且经过广泛测试。
    • 提供了高效的集合和缓存实现。
    • 适合需要高性能和复杂数据结构的应用。

官方文档:https://wizardforcel.gitbooks.io/guava-tutorial/content/1.html

八、其他工具类

  • IPUtil:处理与 IP 地址相关的操作。
  • CollectionUtils:简化对 Java 集合的常见操作。
  • MDC:在日志记录中关联线程上下文信息。
  • ClassUtils:处理与类相关的工具方法。
  • BeanUtils:用于 Java Bean 属性的复制和操作。
  • ReflectionUtils:简化反射操作,动态处理类和对象。

热搜词