Java中如何使用Matcher提取两个Bearer token并以冒号拼接返回
解决方案
核心调整点
- 将正则Pattern提取为类静态常量,避免每次方法调用重复编译正则表达式,提升执行效率
- 抽取独立的单个token提取方法,复用匹配逻辑,同时增加匹配失败的异常处理,避免空指针风险
- 在原getToken方法中分别提取新旧两个token的值,按照要求用英文冒号拼接后返回
完整代码实现
import org.apache.commons.lang3.StringUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; public class TestToken { // 静态常量存储正则规则,仅编译一次 private static final Pattern BEARER_PATTERN = Pattern.compile( "^Bearer (?<token>[a-zA-Z0-9-._~+/]+)=*$", Pattern.CASE_INSENSITIVE); public static void main(String[] args) { String oldToken = "Bearer IdmH0VCifziTjHNGfyKfK9YCoEsy6nTDI"; String newToken = "Bearer IdsfdWeRrrfziTjHNGfyKfK9YCoEsy6nTDI"; String result = getToken(oldToken, newToken); System.out.println("result: " + result); } private static String getToken(String oldToken, String newToken) { // 分别提取两个token String extractedOld = extractSingleToken(oldToken); String extractedNew = extractSingleToken(newToken); // 按要求拼接,冒号两侧带空格 return extractedOld + " : " + extractedNew; } /** * 提取单个Bearer格式字符串中的有效token * @param bearerStr 待提取的Bearer格式字符串 * @return 有效token值 */ private static String extractSingleToken(String bearerStr) { if (StringUtils.isBlank(bearerStr) || !StringUtils.startsWithIgnoreCase(bearerStr, "bearer")) { throw new IllegalArgumentException("非法的Bearer格式字符串:" + bearerStr); } Matcher matcher = BEARER_PATTERN.matcher(bearerStr); if (matcher.matches()) { return matcher.group("token"); } throw new IllegalArgumentException("未匹配到有效token:" + bearerStr); } }
运行输出
result: IdmH0VCifziTjHNGfyKfK9YCoEsy6nTDI : IdsfdWeRrrfziTjHNGfyKfK9YCoEsy6nTDI
内容的提问来源于stack exchange,提问作者Learning Java
相关产品推荐
相关产品推荐

