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

如何从指定格式的messageId字符串中提取公司ID(school-name-country-code)

从messageId提取公司ID的解决方案

你的messageId格式为 username_company-name-country-code-123random-abc-num,示例值为:

String messageId = "007_random-com-usa-9qwerty-abc-1a2b3c";

需要提取的公司ID是其中的company-name-country-code部分(对应示例里的random-com-usa)。

你已经通过下划线拆分得到了后半段字符串,以下是几种可行的提取方式:

方法一:按短横线拆分截取前3段

利用公司ID固定为3个短横线分隔段的规则,拆分后拼接前3部分:

String[] messageIdDetails = schoolDetailsObject.getString("messageid").split("_");
int userId = Integer.parseInt(messageIdDetails[0]);
// 将下划线后的部分按短横线拆分
String[] restSegments = messageIdDetails[1].split("-");
// 拼接前3段得到公司ID
String companyId = String.join("-", restSegments[0], restSegments[1], restSegments[2]);

方法二:正则表达式匹配

通过正则直接匹配下划线后符合[内容]-[内容]-[内容]格式的部分,适配性更强:

String messageId = schoolDetailsObject.getString("messageid");
// 匹配下划线后连续三个用短横线分隔的字符串
Pattern pattern = Pattern.compile("_(\\w+-\\w+-\\w+)");
Matcher matcher = pattern.matcher(messageId);
String companyId = "";
if (matcher.find()) {
    companyId = matcher.group(1);
}
// 提取userId
int userId = Integer.parseInt(messageId.split("_")[0]);

方法三:按索引定位截取

如果格式完全固定,也可以通过查找第三个短横线的位置来截取目标内容:

String[] messageIdDetails = schoolDetailsObject.getString("messageid").split("_");
int userId = Integer.parseInt(messageIdDetails[0]);
String restStr = messageIdDetails[1];
// 依次找到第一个、第二个、第三个短横线的索引
int firstDash = restStr.indexOf("-");
int secondDash = restStr.indexOf("-", firstDash + 1);
int thirdDash = restStr.indexOf("-", secondDash + 1);
// 截取从开头到第三个短横线前的内容
String companyId = restStr.substring(0, thirdDash);

注意:方法一和方法三依赖格式的固定性,若后续服务商调整messageId格式,需要同步修改代码;正则表达式的方式灵活度更高,可根据实际格式调整正则规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:20:25