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

Java字符串处理及AD日志提取Logged on/off问题求助

如何从Active Directory的不规则描述字符串中提取Logged on/Logged off字段?

问题描述

我从Active Directory中读取到格式不规则的字符串,示例为:"description: John Newman Logged on: 03.26.2018 9:26:29",其中字段内容的词数不固定。我需要从中提取出"Logged on"或"Logged off"对应的字段值。

我尝试了以下代码:

String a = Objects.toString(attrs.get("description"));//从Active Directory获取值
String b = a.split(":")[1];

但得到的结果是John Newman Logged on,不是我想要的登录时间。恳请大家提供帮助,谢谢。


解决方案

方法1:正则表达式匹配(最可靠)

既然目标字段是明确的Logged on:或Logged off:,用正则表达式直接匹配这两个关键词后面的内容是最稳妥的方案——不管前面的描述内容有多复杂,只要这两个关键词存在,就能精准提取对应的值。

代码示例:

String description = Objects.toString(attrs.get("description"));
// 正则规则:匹配"Logged on:"或"Logged off:",然后捕获后面的所有内容
Pattern pattern = Pattern.compile("(Logged on|Logged off):\\s*(.*)");
Matcher matcher = pattern.matcher(description);

if (matcher.find()) {
    String actionType = matcher.group(1); // 拿到"Logged on"或"Logged off"
    String targetValue = matcher.group(2); // 拿到对应的时间,比如"03.26.2018 9:26:29"
    System.out.println(actionType + " 的值是:" + targetValue);
} else {
    // 处理未找到目标字段的情况
    System.err.println("未检测到Logged on或Logged off字段");
}

方法2:定位关键词位置后截取

如果不想用正则,也可以通过定位Logged on:或Logged off:的最后出现位置,再截取后面的内容。不过这个方法需要注意关键词的长度,适合你确定字符串格式不会有太多变化的场景:

String description = Objects.toString(attrs.get("description"));
// 找到两个关键词最后出现的位置,取较大的那个(确保找到存在的那个)
int keywordIndex = Math.max(description.lastIndexOf("Logged on:"), description.lastIndexOf("Logged off:"));

if (keywordIndex != -1) {
    // 根据找到的关键词,计算需要截取的起始位置
    int startPos = keywordIndex + (keywordIndex == description.lastIndexOf("Logged on:") ? 10 : 11);
    String targetValue = description.substring(startPos).trim(); // 去掉首尾空格
    System.out.println("提取的值是:" + targetValue);
} else {
    System.err.println("未找到目标字段");
}

为什么你的原代码没生效?

你用split(":")会把字符串按所有冒号分割成数组,数组的第二个元素是第一个冒号到第二个冒号之间的内容(也就是 John Newman Logged on),但你需要的是Logged on:这个关键词后面的部分,所以原方法无法区分不同冒号的作用,自然得不到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:34:34