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
相关产品推荐
相关产品推荐

