java - 如何提高代码质量以查看字符串是否与 Java 正则表达式之一匹配

标签 java regex if-statement optimization

在我的一个项目中,我需要将 URI 与多个正则表达式模式(15+ 正则表达式模式)进行比较。目前,我使用了 if 梯形图来查看它们中的任何一个是否匹配,然后执行代码的逻辑部分。

现在的代码一瞥:

if (uri.matches(Constants.GET_ALL_APIS_STORE_REGEX)) {    
    long lastUpdatedTime = InBoundETagManager.apisGet(null, null, tenantDomain, null);
    String eTag = ETagGenerator.getETag(lastUpdatedTime);
    if (eTag.equals(ifNoneMatch)) {
        message.getExchange().put("ETag", eTag);
        generate304NotModifiedResponse(message);
    }
    message.getExchange().put("ETag", eTag);
} 
else if (uri.matches(Constants.GET_API_FOR_ID_REGEX)) {   //        /apis/{apiId}
    apiId = UUIDList.get(0);
    String requestedTenantDomain = RestApiUtil.getRequestedTenantDomain(tenantDomain);
    long lastUpdatedTime = InBoundETagManager.apisApiIdGet(apiId, requestedTenantDomain, uri);
    String eTag = ETagGenerator.getETag(lastUpdatedTime);
    handleInterceptorResponse(message, ifNoneMatch, eTag);
} 
else if (uri.matches(Constants.GET_SWAGGER_FOR_API_ID_REGEX)) {   //  /apis/{apiId}/swagger
    apiId = UUIDList.get(0);
    long lastUpdatedTime = InBoundETagManager.apisApiIdSwaggerGet(apiId, tenantDomain); 
    String eTag = ETagGenerator.getETag(lastUpdatedTime);
    if (lastUpdatedTime == 0L) {
        log.info("No last updated time available for the desired API swagger json file");
    }
    handleInterceptorResponse(message, ifNoneMatch, eTag);
}

有人可以向我介绍一种更简洁、更聪明的方法来进行正则表达式匹配吗?

最佳答案

一个 url-type(regex) = 一个处理程序 = 一个类。这种方式会更容易阅读和支持,特别是如果您有 15 个正则表达式检查。

interface URLHandler {
    void handle();
    boolean isSupported(String url);
}

class GetAllApisStoreHandler implements URLHandler{
    private static final Pattern GET_ALL_API_STORE_PATTERN = Pattern.compile(GET_ALL_APIS_STORE_REGEX);

    public boolean isSupported(String url) {
        return GET_ALL_API_STORE_PATTERN.matcher(url).matches();
    }

    public void handle(...) {
        ...
    }
}

class GetApiIdHandler implements URLHandler{
    private static final Pattern GET_API_ID_REGEX = Pattern.compile(GET_API_ID_REGEX);

    public boolean isSupported(String url) {
        return GET_API_ID_PATTERN.matcher(url).matches();
    }

    public void handle(...) {
        ...
    }
}

class GetApiIdHandler implements URLHandler{
    private static final Pattern GET_SWAGGER_FORAPI_ID_PATTERN = Pattern.compile(GET_SWAGGER_FOR_API_ID_REGEX);

    public boolean isSupported(String url) {
        return GET_SWAGGER_FORAPI_ID_PATTERN.matcher(url).matches();
    }

    public void handle(...) {
        ...
    }
}

class Main {
    private List<URLHandler> urlHandlers;

    public void method(){
        ...
        for (URLHandler handler : urlHandlers) {
            if(handler.isSupported(url)) {
               handler.handle(arg1, arg2, arg3, ...); 
            }
        }
        ...
    }
}

关于java - 如何提高代码质量以查看字符串是否与 Java 正则表达式之一匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39762279/

相关文章:

Java PBE 加密字符串长度与输入相同

java - 如何从Access的表中获取前2条记录并将它们添加到Jtable(数据过滤器)

java - 使用resttemplate解析json

java - 从 java HttpClient 使用 kerberos 验证共享点

Python Regex 在 3 个在线测试人员上成功测试,但在代码中不起作用

javascript - 验证 javascript 十进制数

python - 如何匹配字符串中任意位置的两个字符

Python: "if not any"的问题

C 代码和条件的正确语法

javascript - Grunt 模板变量和 if else