问题描述
试题编号: | 201803-3 |
试题名称: | URL映射 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 URL 映射是诸如 Django、Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件。对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 URL 地址,并将其分派给相应的处理代码。现在,请你来实现一个简单的 URL 映射功能。 输入格式 输入第一行是两个正整数 n 和 m,分别表示 URL 映射的规则条数和待处理的 URL 地址个数,中间用一个空格字符分隔。 输出格式 输入共 m 行,第 i 行表示 qi 的匹配结果。如果匹配成功,设匹配了规则 pj ,则输出对应的 rj。同时,如果规则中有参数,则在同一行内依次输出匹配后的参数。注意整数参数输出时要把前导零去掉。相邻两项之间用一个空格字符分隔。如果匹配失败,则输出 404。 样例输入 5 4 样例输出 year_archive 2004 样例说明 对于第 1 个地址 /articles/2004/,无法匹配第 1 条规则,可以匹配第 2 条规则,参数为 2004。 数据规模和约定 1 ≤ n ≤ 100,1 ≤ m ≤ 100。 |
把字符串的前导0也去掉了,80分。。。
1 import java.util.LinkedHashMap; 2 import java.util.Map; 3 import java.util.Scanner; 4 import java.util.regex.Matcher; 5 import java.util.regex.Pattern; 6 7 8 public class Main { 9 10 public static void main(String[] args) { 11 int n, m; 12 int flag = 0; 13 Scanner sc = new Scanner(System.in); 14 n = sc.nextInt(); 15 m = sc.nextInt(); 16 sc.nextLine(); 17 LinkedHashMap<String, String> mp = new LinkedHashMap<>(); 18 for (int i = 1; i <= n; ++i) { 19 String line = sc.nextLine(); 20 String[] arr = line.split(" "); 21 mp.put(arr[0], arr[1]); 22 } 23 24 for (int i = 1; i <= m; ++i) { 25 String line = sc.nextLine(); 26 for (Map.Entry<String, String> en : mp.entrySet()) { 27 String regex = en.getKey(); 28 regex = regex.replace("<int>", "(\\d+)"); 29 regex = regex.replace("<str>", "(.+)"); 30 regex = regex.replace("<path>", "(.+)"); 31 if(line.matches(regex)) { // 完全匹配 32 flag = 1; 33 Pattern p = Pattern.compile(regex); 34 Matcher mat = p.matcher(line); 35 while (mat.find()) { 36 System.out.print(en.getValue()); 37 for (int j = 1; j <= mat.groupCount(); ++j) { 38 String str = mat.group(j); 39 // if(str.matches("\\d+")) 40 str = str.replaceAll("^0+", ""); // 去掉数字前面的0 (字符串前面的0也去掉了) 41 System.out.print(" " + str); 42 } 43 System.out.println(); 44 } 45 break; 46 } 47 } 48 if(flag == 0) 49 System.out.println(404); 50 else 51 flag = 0; // 重置flag 52 } 53 54 } 55 56 }
原文地址:https://www.cnblogs.com/FengZeng666/p/11484278.html