You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 7下禁用String.split()时提取字符串中CN属性值的方法求助

提取字符串中的CN属性值(Java 7实现,不使用split())

没问题,我来帮你搞定这个需求!因为你用的是Java 7且不能用String.split(),我们可以通过循环调用indexOf()的方式来定位并提取所有CN属性的值,逻辑简单直接,兼容性拉满。

实现思路

  • 定位CN起始标记:循环查找字符串中所有"CN="的出现位置,这是每个CN值的起始标识。
  • 确定CN值的边界:找到"CN="后,从它的下一个字符开始,查找第一个逗号,的位置(你的示例中CN值后面都是跟着,OU=...);如果找不到逗号,就取到字符串末尾,兼容最后一个CN值没有逗号的情况。
  • 截取并收集值:截取"CN="结束到逗号之间的子串,用trim()处理可能的意外空格,然后加入结果列表。
  • 更新查找起始点:每次处理完一个CN值后,把下一次查找的起始位置设为当前逗号的下一个字符,避免重复处理。

完整代码示例

import java.util.ArrayList;
import java.util.List;

public class CNAttributeExtractor {
    public static void main(String[] args) {
        String input = "member;range=12001-*: CN=marimar,OU=Employees,OU=Cisco Users,DC=cisco,DC=com, CN=cadautel,OU=Employees,OU=Cisco Users,DC=cisco,DC=com CN=rajaki,OU=Employees,OU=Cisco Users,DC=cisco,DC=com";
        
        List<String> cnValues = new ArrayList<>();
        final String CN_PREFIX = "CN=";
        int currentStart = 0;

        while (true) {
            // 查找下一个"CN="的位置
            int cnStartIndex = input.indexOf(CN_PREFIX, currentStart);
            if (cnStartIndex == -1) {
                break; // 没有更多CN属性,退出循环
            }

            // 计算CN值的起始索引(跳过"CN="这3个字符)
            int valueStart = cnStartIndex + CN_PREFIX.length();
            
            // 查找CN值的结束位置(第一个逗号)
            int valueEnd = input.indexOf(',', valueStart);
            
            // 如果找不到逗号,说明是最后一个CN值,取到字符串末尾
            if (valueEnd == -1) {
                valueEnd = input.length();
            }

            // 截取并清理CN值,加入结果列表
            String cnValue = input.substring(valueStart, valueEnd).trim();
            cnValues.add(cnValue);

            // 更新下一次查找的起始位置
            currentStart = valueEnd + 1;
        }

        // 打印结果
        System.out.println("提取到的CN属性值:");
        for (String value : cnValues) {
            System.out.println("- " + value);
        }
    }
}

代码说明

  • 用final String CN_PREFIX = "CN=";定义固定前缀,方便后续维护修改。
  • indexOf()的第二个参数指定查找起始位置,确保每次都从上次处理完的位置开始,不会重复匹配同一个"CN="。
  • trim()方法用于处理可能的意外空格(比如示例中第二个CN前面有, 的空格,加上这个方法更保险)。
  • 循环终止条件是indexOf()返回-1,表示已经找不到更多的"CN="标记。

运行这段代码后,你会得到期望的结果:marimar、cadautel、rajaki。

内容的提问来源于stack exchange,提问作者surya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:31:34