开源项目分析-Apache_Commons_lang

# 开源项目分析-Apache_Commons_lang

许可证:Apache License 2.0

文档:[Lang – Home (apache.org)](https://commons.apache.org/proper/commons-lang/)

社区:[Apache Commons – Apache Commons Maillist](https://commons.apache.org/mail-lists.html)

代码信息介绍:Apache Commons Lang, a package of Java utility classes for the classes that are in java.lang's hierarchy, or are considered to be so standard as to justify existence in java.lang.

选择功能:containsAny(判断字符串是否包含字符集合字符)

代码实现:

```java
public char[] toCharArray() {
        if (size == 0) {
            return ArrayUtils.EMPTY_CHAR_ARRAY;
        }
        final char[] chars = new char[size];
        System.arraycopy(buffer, 0, chars, 0, size);
        return chars;
    }
    
/**
     * Takes an argument in set-syntax, see evaluateSet,
     * and identifies whether any of the characters are present in the specified string.
     *
     * <pre>
     * CharSetUtils.containsAny(null, *)        = false
     * CharSetUtils.containsAny("", *)          = false
     * CharSetUtils.containsAny(*, null)        = false
     * CharSetUtils.containsAny(*, "")          = false
     * CharSetUtils.containsAny("hello", "k-p") = true
     * CharSetUtils.containsAny("hello", "a-d") = false
     * </pre>
     *
     * @see CharSet#getInstance(String...) for set-syntax.
     * @param str  String to look for characters in, may be null
     * @param set  String[] set of characters to identify, may be null
     * @return whether or not the characters in the set are in the primary string
     * @since 3.2
     */
    public static boolean containsAny(final String str, final String... set) {
        if (StringUtils.isEmpty(str) || deepEmpty(set)) {
            return false;
        }
        final CharSet chars = CharSet.getInstance(set);
        for (final char c : str.toCharArray()) {
            if (chars.contains(c)) {
                return true;
            }
        }
        return false;
    }
```

运行逻辑:

- containsAny:
  1. 参数检查:首先,方法会检查输入参数,确保它们不为空。如果 `str` 为 `null` 或者 `set` 是一个深度为空(即为 `null` 或所有元素都为 `null` 或空字符串)的数组,那么方法将直接返回 `false`,表示没有找到任何字符。
  2. 创建字符集对象:接下来,方法会使用 `CharSet.getInstance(set)` 来创建一个 `CharSet` 对象,`CharSet` 是一个字符集工具类,用于表示字符集的集合。
  3. 遍历字符串:然后,方法会遍历输入的字符串 `str` 中的每个字符。它将字符串拆分为字符数组,并对每个字符执行以下操作:
     - 使用 `chars.contains(c)` 检查字符 `c` 是否在字符集 `chars` 中存在,如果存在,则立即返回 `true` 表示找到了匹配的字符。
  4. 返回结果:如果遍历完整个字符串后都没有找到任何匹配的字符,则方法返回 `false`,表示没有找到任何字符。
- toCharArray:
  1. 首先,方法检查字符串缓冲区的大小(`size`)。如果缓冲区的大小为0,表示字符串为空,那么它将返回一个空的字符数组,这个空字符数组是通过 `ArrayUtils.EMPTY_CHAR_ARRAY` 来表示的。这是一种优化,避免了不必要的数组复制操作,因为字符串是空的,不需要复制任何字符。
  2. 如果字符串缓冲区不为空(`size` 大于0),那么方法会创建一个新的字符数组 `chars`,其长度为字符串缓冲区的大小(`size`)。
  3. 接下来,方法使用 `System.arraycopy` 方法将字符串缓冲区中的字符复制到新创建的字符数组 `chars` 中。具体地,它从字符串缓冲区 `buffer` 中的索引0开始,复制 `size` 个字符到字符数组 `chars` 的索引0位置。这样就完成了字符的复制操作。
  4. 最后,方法返回复制后的字符数组 `chars`。

学习收获:

1. 理解了注释和代码规范的价值:在阅读中,我深刻地感觉到了代码注释的好处,同时清晰的命名也有助于我理解函数的用途
2. 学习了代码架构:在选择项目的过程中,可以看到不同项目的不同架构,让我认识到了一个已懂的项目要层次尽可能简单,但是也要有明确的划分,便于查找

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值