在处理URL拼接时,常常会遇到路径分隔符 / 的重复或缺失问题。本文提供一种简洁高效的解决方案,确保无论输入如何,都能生成格式正确的完整URL。
题目描述
给定一个URL前缀和URL后缀(通过逗号 , 分割),需要将其连接为一个完整的URL:
- 如果前缀结尾和后缀开头都没有
/,需要自动补上/连接符 - 如果前缀结尾和后缀开头都为
/,需要自动去重
约束:不用考虑前后缀URL不合法的情况
输入输出要求
输入:url前缀(长度小于100的字符串),url后缀(长度小于100的字符串)
输出:拼接后的url
示例
| 输入 | 输出 |
|---|---|
/acm,/bb | /acm/bb |
/abc/,/bcd | /abc/bcd |
/acd,bef | /acd/bef |
, | / |
优化后的Java解法
import java.util.Scanner;
public class ConcatURL {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
String[] parts = line.split(",", 2); // 限制分割为两部分
String prefix = parts.length > 0 ? parts[0] : "";
String suffix = parts.length > 1 ? parts[1] : "";
// 处理特殊情况:两个都为空
if (prefix.isEmpty() && suffix.isEmpty()) {
System.out.println("/");
return;
}
StringBuilder result = new StringBuilder();
// 添加前缀(确保不以/结尾)
if (!prefix.isEmpty()) {
if (prefix.endsWith("/")) {
result.append(prefix, 0, prefix.length() - 1);
} else {
result.append(prefix);
}
}
// 添加分隔符
result.append("/");
// 添加后缀(确保不以/开头)
if (!suffix.isEmpty()) {
if (suffix.startsWith("/")) {
result.append(suffix.substring(1));
} else {
result.append(suffix);
}
}
System.out.println(result.toString());
}
}
算法优势
- 正确性:原题解法存在逻辑错误,简单地移除所有
/再重新添加会导致路径信息丢失(如//api/v1会被错误处理) - 健壮性:正确处理各种边界情况,包括空输入、单个
/等 - 效率:时间复杂度 O(n),空间复杂度 O(n),符合题目约束条件