如何从URL中提取所有以#包裹的Token?
解决方案:提取URL中#包裹的Token
问题原因分析
你之前用的两种方法存在局限性:
StringUtils.substringBetween(url, "#")仅能提取第一个被#包裹的内容(还不带前后#),无法获取所有匹配项。StringTokenizer按#分割后,需要手动筛选Token内容,逻辑繁琐且容易因URL格式变化出错。
最优实现:正则表达式匹配
使用正则表达式可以精准匹配所有#xxx#格式的Token,代码示例如下:
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TokenExtractor { public static void main(String[] args) { String url = "https://example.com/#EMAIL#/F77A1B8BDF89B7E4E90206DAC26AA737?firstname=#FIRSTNAME#&lastname=#LASTNAME#"; // 正则规则:匹配所有以#开头、#结尾,中间不含#的内容 Pattern tokenPattern = Pattern.compile("#[^#]+#"); Matcher matcher = tokenPattern.matcher(url); List<String> tokenList = new ArrayList<>(); // 遍历所有匹配结果 while (matcher.find()) { tokenList.add(matcher.group()); } // 转成逗号分隔的字符串输出 String result = String.join(", ", tokenList); System.out.println(result); // 输出:#EMAIL#, #FIRSTNAME#, #LASTNAME# } }
代码说明
- 正则
#[^#]+#:[^#]+表示匹配任意非#的字符(至少一个),确保只会匹配完整的#xxx#格式Token。 matcher.find()会循环查找所有符合规则的匹配项,matcher.group()返回当前匹配的完整Token(包含前后#)。- 最终可以将Token列表转为你需要的格式(列表或逗号分隔字符串)。
内容的提问来源于stack exchange,提问作者Jhonatan jOna Arcila
相关产品推荐
相关产品推荐

