如何从指定格式的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
相关产品推荐
相关产品推荐

