使用java语言编写代码一个合法的URL是一个由三部分构成的字符串:协议名+域名+资源位置+本题中规定协议只能是http或者https;域名是由分隔的2~4段字符串每个字符串由英文字母、数字或者下划线组成;资源位置是由分隔的若干段字符串组成表示资源在服务器上存储的位置每个字符串由英文字母、数字或者下划线组成最后一段可以是文件名形式为字符串字符串;末尾可以有。其中资源位置和都是可选的协议名和域名是必
import java.util.Scanner;
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); scanner.nextLine(); for (int i = 0; i < n; i++) { String line = scanner.nextLine(); if (isValidUrl(line)) { System.out.println("Y"); } else { System.out.println("N"); } } }
private static boolean isValidUrl(String url) {
// 判断协议
if (!url.startsWith("http://") && !url.startsWith("https://")) {
return false;
}
// 去掉协议
String domainAndPath = url.substring(url.indexOf("//") + 2);
// 判断域名
String[] parts = domainAndPath.split("/");
String domain = parts[0];
if (!isValidDomain(domain)) {
return false;
}
// 判断路径
if (parts.length > 1) {
for (int i = 1; i < parts.length; i++) {
if (!isValidPath(parts[i])) {
return false;
}
}
}
return true;
}
private static boolean isValidDomain(String domain) {
String[] parts = domain.split("\\.");
if (parts.length < 2 || parts.length > 4) {
return false;
}
for (String part : parts) {
if (!part.matches("[a-zA-Z0-9_]+")) {
return false;
}
}
return true;
}
private static boolean isValidPath(String path) {
if (path.isEmpty()) {
return false;
}
if (path.equals("/")) {
return true;
}
String[] parts = path.split("/");
for (int i = 0; i < parts.length; i++) {
String part = parts[i];
if (i == parts.length - 1) {
// 最后一段可以是文件名,形式为“字符串.字符串”
if (!part.matches("[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)?")) {
return false;
}
} else {
if (!part.matches("[a-zA-Z0-9_]+")) {
return false;
}
}
}
return true;
}
}
原文地址: https://www.cveoy.top/t/topic/bD2G 著作权归作者所有。请勿转载和采集!