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

Java如何实现URL前缀最长匹配,从URL列表中查找最长匹配项

Java 实现URL最长匹配前缀

实现逻辑

  • 先处理空列表、空搜索字符串等边界情况
  • 遍历待匹配URL列表,逐个计算与搜索URL的公共前缀
  • 所有公共前缀中取长度最长的作为最终结果
  • 提供两种匹配规则:
    • 逐字符通用匹配:适用于任意字符串前缀匹配场景
    • 按URL路径段匹配:按/拆分路径后匹配完整段,更贴合URL业务场景,输出结果和示例要求完全一致

完整代码示例

按路径段匹配(推荐,符合示例输出要求)

import java.util.List;
import java.util.Arrays;

public class UrlPrefixMatcher {
    public static String findLongestPathPrefix(List<String> urls, String searchUrl) {
        if (urls == null || urls.isEmpty() || searchUrl == null || searchUrl.isBlank()) {
            return "";
        }
        String longestPrefix = "";
        // 提前拆分搜索URL的路径段,避免重复计算
        String[] searchParts = searchUrl.split("/", -1);

        for (String url : urls) {
            String[] urlParts = url.split("/", -1);
            int minLen = Math.min(urlParts.length, searchParts.length);
            int matchCount = 0;
            // 逐段匹配
            while (matchCount < minLen && urlParts[matchCount].equals(searchParts[matchCount])) {
                matchCount++;
            }
            // 拼接匹配到的路径段
            String currentPrefix = String.join("/", Arrays.copyOf(urlParts, matchCount));
            // 更新最长前缀
            if (currentPrefix.length() > longestPrefix.length()) {
                longestPrefix = currentPrefix;
            }
        }
        return longestPrefix;
    }

    public static void main(String[] args) {
        List<String> urls = List.of(
                "/a/b/c/d",
                "/a/b/a/d",
                "/a/a/c/d",
                "/q/w/e/r/"
        );
        String search = "/a/b/c/e/q";
        // 输出结果为 /a/b/c,和示例要求完全一致
        System.out.println(findLongestPathPrefix(urls, search));
    }
}

逐字符通用匹配版本

import java.util.List;

public class CharPrefixMatcher {
    public static String findLongestCharPrefix(List<String> urls, String search) {
        if (urls == null || urls.isEmpty() || search == null || search.isBlank()) {
            return "";
        }
        String longestPrefix = "";
        for (String url : urls) {
            int minLen = Math.min(url.length(), search.length());
            int i = 0;
            while (i < minLen && url.charAt(i) == search.charAt(i)) {
                i++;
            }
            String currentPrefix = url.substring(0, i);
            if (currentPrefix.length() > longestPrefix.length()) {
                longestPrefix = currentPrefix;
            }
        }
        return longestPrefix;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:33:01